2011-10-05 68 views
3
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

回答

1

標記<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部分,但感謝您的幫助 –

0

你也可以嘗試使用XStream,這是一個很好用的XML解析器。使您幾乎沒有工作來解析已知的XML結構。

PS:他們的網站目前處於離線狀態,使用谷歌緩存看到它= P