#java #xml #xml-parsing
#java #xml #xml-синтаксический анализ
Вопрос:
У меня есть URL: http://ws.audioscrobbler.com/2.0/?method=chart.getlovedtracksamp;api_key=b25b959554ed76058ac220b7b2e0a026amp;page=3amp;limit=25 которые отображают XML-файл с информацией о названии песни и исполнителе. Он также отображает 3 ссылки на изображения разного размера, эти URL-адреса изображений идентифицируются
<image size="small">
<image size="large">
<image size="extralarge">
Вот код, который я использую в данный момент, однако я не знаю, как получить URL-адрес только для изображения среднего размера???
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 artistImageExpr = xPathEvaluator.compile("following-sibling::/image");
NodeList artistImageNodes = (NodeList) artistImageExpr.evaluate(trackNameNode, XPathConstants.NODESET);
for (int j=0; j < artistImageNodes.getLength(); j ) {
System.out.println(String.format(" -Image URL: %s", artistImageNodes.item(j).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()));
}
}
}
Комментарии:
1. Если вам не нравится XML, вам следует попробовать JSON. Last.fm-API поддерживает их оба .
2. В вашем случае запуск нескольких
XPathExpression
s является излишним… В любом случае, вам нужно просто указать необходимое значение атрибутаfollowing-sibling::/image[size="meduim"]