在Java中从API解析Last.Fm XML
网址: 从上面的url中,我需要以某种方式从每个歌曲生成的XML文件中删除艺术家名称和曲目名称,但我不知道如何使用以这种方式构造的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
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()));
}
}
}
}