Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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
在Java中从API解析Last.Fm XML_Java_Xml - Fatal编程技术网

在Java中从API解析Last.Fm XML

在Java中从API解析Last.Fm XML,java,xml,Java,Xml,网址: 从上面的url中,我需要以某种方式从每个歌曲生成的XML文件中删除艺术家名称和曲目名称,但我不知道如何使用以这种方式构造的XML文件 任何帮助或指点都将不胜感激 谢谢, Ross这是一个完全工作的类,它加载您指定的URL并解析曲目和艺术家名称 基本上,它将xml读入文档,并在循环中运行2个xpath查询以获取所需的数据 文档本身是简单的xml,如果重新格式化,它看起来像: <?xml version="1.0" encoding="utf-8"?> <lfm statu

网址:

从上面的url中,我需要以某种方式从每个歌曲生成的XML文件中删除艺术家名称和曲目名称,但我不知道如何使用以这种方式构造的XML文件

任何帮助或指点都将不胜感激

谢谢,
Ross

这是一个完全工作的类,它加载您指定的URL并解析曲目和艺术家名称

基本上,它将xml读入文档,并在循环中运行2个xpath查询以获取所需的数据

文档本身是简单的xml,如果重新格式化,它看起来像:

<?xml version="1.0" encoding="utf-8"?>
<lfm status="ok">
  <tracks page="1" perPage="10" totalPages="50" total="500">
    <track>
      <name>Hysterical</name>
      <duration>231</duration>
      <percentagechange>3626</percentagechange>
      <mbid/>
      <url>http://www.last.fm/music/Clap+Your+Hands+Say+Yeah/_/Hysterical</url>
      <streamable fulltrack="0">0</streamable>
      <artist>
        <name>Clap Your Hands Say Yeah</name>
        ...

您想从文件中删除它们,还是提取它们?你期望什么样的产出?从该URL获取的xml没有问题,只是格式很奇怪,但是你可以使用类似于
xmlstarlet fo-s2 file.xml的东西来重新格式化它,这样你就可以更好地理解它的布局。我想从xml文件中提取歌曲和艺术家的名字,但我不确定处理这个格式奇怪的文件是否合适???非常感谢!这正是我所需要的,而且解释得很好!谢谢
package net.fish;

import java.net.URL;
import java.net.URLConnection;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ParseXML {

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

    public static void main(String[] args) throws Exception {
        new ParseXML().parseXml("http://ws.audioscrobbler.com/2.0/?method=chart.gethypedtracks&api_key=1732077d6772048ccc671c754061cb18&limit=10");
    }

    private 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/tracks/track/name");
        NodeList trackNameNodes = (NodeList) nameExpr.evaluate(document, XPathConstants.NODESET);
        for (int i = 0; i < trackNameNodes.getLength(); i++) {
            Node trackNameNode = trackNameNodes.item(i);
            System.out.println(String.format("Track Name: %s" , trackNameNode.getTextContent()));
            XPathExpression artistNameExpr = xPathEvaluator.compile("following-sibling::artist/name");
            NodeList artistNameNodes = (NodeList) artistNameExpr.evaluate(trackNameNode, XPathConstants.NODESET);
            for (int j=0; j < artistNameNodes.getLength(); j++) {
                System.out.println(String.format(" - Artist Name: %s", artistNameNodes.item(j).getTextContent()));
            }
        }
    }
}