从WordPress解析Java中的XML

问题描述:

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("rss/channel/item/title"); 
    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("Blog Entry Title: %s" , trackNameNode.getTextContent())); 
     XPathExpression artistNameExpr = xPathEvaluator.compile("rss/channel/item/content:encoded"); 
     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())); 
     } 
    } 
} 

我有这个代码来解析标题和内容从默认的wordpress xml,唯一的问题是,当我尝试获取博客条目的内容时,xml标签是:<content:encoded>,我不明白如何检索这些数据?从WordPress解析Java中的XML

+1

份额XML或它的少部分看到的结构。也考虑使用jaxb。 – harshit

+0

http://wordpress.org/news/feed/我想解析的XML与此格式相同。 –

+0

@ beny23是否设法检索值数据? – alex

标记<content:encoded>表示XML名称空间中名称为encoded的元素,其前缀为content。 XPath评估程序可能无法解析其名称空间的前缀content,我认为这是来自Google的快速搜索引擎http://purl.org/rss/1.0/modules/content/

为了得到它来解决,你需要做到以下几点:

  1. 确保您的DocumentBuilderFactory呼吁其施工后setNamespaceAware(true),否则,所有的命名空间解析过程中丢弃。
  2. 编写一个javax.xml.namespace.NamespaceContext的实现来解析它的名称空间的前缀(doc)。
  3. 请致电XPath#setNamespaceContext()与您的实施。
+0

对不起,我不明白第2部分,但感谢您的帮助 –

你也可以尝试使用XStream,这是一个很好用的XML解析器。使您几乎没有工作来解析已知的XML结构。

PS:他们的网站目前处于离线状态,使用谷歌缓存看到它= P