Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用xpath实现java中的XML解析_Java_Xml_Parsing_Xpath_Last.fm - Fatal编程技术网

用xpath实现java中的XML解析

用xpath实现java中的XML解析,java,xml,parsing,xpath,last.fm,Java,Xml,Parsing,Xpath,Last.fm,我正在打印一些数据 所以我的代码是 private static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY = DocumentBuilderFactory.newInstance(); private static final XPathFactory XPATH_FACTORY = XPathFactory.newInstance(); public void parseXml(String

我正在打印一些数据 所以我的代码是

 private static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY = DocumentBuilderFactory.newInstance();
        private static final XPathFactory XPATH_FACTORY = XPathFactory.newInstance();
        public void parseXml(String urlPath) throws Exception {
            URL url = new URL(urlPath);
            URLConnection connection = url.openConnection();
            DocumentBuilder db = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();

            final Document document = db.parse(connection.getInputStream());
            XPath xPathEvaluator = XPATH_FACTORY.newXPath();
            XPathExpression nameExpr = xPathEvaluator.compile("lfm/results/trackmatches/track");
            NodeList tracksinfoNodes = (NodeList) nameExpr.evaluate(document, XPathConstants.NODESET);
            for (int i = 0; i < tracksinfoNodes.getLength(); i++) {
                Node trackNameNode = tracksinfoNodes.item(i);
                System.out.println(String.format("Track Name: %s" , trackNameNode.getTextContent()));
                }

        }
我使用的url是

所以我要做的就是让每个人都单独一人,就像这样

song : I Believe in You
artist :Neil Young
link : http://www.last.fm/music/Neil+Young/_/I+Believe+in+You
something: 0
views: 90540
linkimg :    http://userserve-ak.last.fm/serve/34s/65285990.png
..
..

试着这样做:

private static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY = DocumentBuilderFactory.newInstance();
private static final XPathFactory XPATH_FACTORY = XPathFactory.newInstance();

public static void parseXml(String urlPath) throws Exception {
    URL url = new URL(urlPath);
    URLConnection connection = url.openConnection();
    DocumentBuilder db = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();

    final Document document = db.parse(connection.getInputStream());
    XPath xPathEvaluator = XPATH_FACTORY.newXPath();

    NodeList tracksinfoNodes = (NodeList) xPathEvaluator.compile("lfm/results/trackmatches/track").evaluate(
            document, XPathConstants.NODESET);
    for (int i = 0; i < tracksinfoNodes.getLength(); i++) {
        Node trackNameNode = tracksinfoNodes.item(i);

        NodeList childs = trackNameNode.getChildNodes();

        for (int j = 0; j < childs.getLength(); j++) {
            Node n = childs.item(j);

            if (!n.getNodeName().equals("#text")) {
                System.out.println(String.format("%s: %s", n.getNodeName(), n.getTextContent()));   
            }
        }

        System.out.println("==============");
    }

}
private static final DocumentBuilderFactory DOCUMENT\u BUILDER\u FACTORY=DocumentBuilderFactory.newInstance();
私有静态最终XPathFactory XPATH_FACTORY=XPathFactory.newInstance();
公共静态void parseXml(字符串urlPath)引发异常{
URL=新URL(URL路径);
URLConnection=url.openConnection();
DocumentBuilder db=DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();
最终文档Document=db.parse(connection.getInputStream());
XPath xPathEvaluator=XPath_FACTORY.newXPath();
NodeList tracksinfoNodes=(NodeList)xpatheevaluator.compile(“lfm/results/trackmatches/track”).evaluate(
文档,XPathConstants.NODESET);
对于(int i=0;i
我还能做些什么吗?例如,如果我想用歌曲名替换标题,请通过节点名获取值。例如,谢谢。我提供的códgio中的答案与您需要的答案相同。我不理解评注中解释的困难。
private static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY = DocumentBuilderFactory.newInstance();
private static final XPathFactory XPATH_FACTORY = XPathFactory.newInstance();

public static void parseXml(String urlPath) throws Exception {
    URL url = new URL(urlPath);
    URLConnection connection = url.openConnection();
    DocumentBuilder db = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();

    final Document document = db.parse(connection.getInputStream());
    XPath xPathEvaluator = XPATH_FACTORY.newXPath();

    NodeList tracksinfoNodes = (NodeList) xPathEvaluator.compile("lfm/results/trackmatches/track").evaluate(
            document, XPathConstants.NODESET);
    for (int i = 0; i < tracksinfoNodes.getLength(); i++) {
        Node trackNameNode = tracksinfoNodes.item(i);

        NodeList childs = trackNameNode.getChildNodes();

        for (int j = 0; j < childs.getLength(); j++) {
            Node n = childs.item(j);

            if (!n.getNodeName().equals("#text")) {
                System.out.println(String.format("%s: %s", n.getNodeName(), n.getTextContent()));   
            }
        }

        System.out.println("==============");
    }

}