2012-07-23 54 views
0

我的問題是,我需要從XPath表達式中檢索原始html,以便獲取html的文本部分。 例如,如果我得到當前的HTML:從Java中的XPath查詢中檢索裸露的html

<div class='text'> 
    <p class='nointerrest'> blabla </p> 
    <p class='goodstuff'> blablabla </p> 
    <p class='goodstuff'> blablabla </p> 
</div> 

然後我的XPath表達式是字符串:

string-join(//p[@class='goodstuff'],' ') 

這給我:

 "blablabla blablabla" 

是有一個XPath表達式,可以回報我:

<p class='goodstuff'> blablabla </p> 
<p class='goodstuff'> blablabla </p> 

作爲一個字符串? (如果可能的XPath表達式最相似的我原來的XPath表達式)

在此先感謝

+0

解決方案是否必須基於XPath? – bpgergo 2012-07-23 15:44:16

+0

是的,我需要獲得帶有XPath表達式的html。 – user1546216 2012-07-23 15:55:11

+0

JDK中的XPath庫不適合你嗎? – 2012-07-23 17:37:40

回答

0

你需要的不僅僅是XPath來獲得所需的輸出。 XPath是一種文檔查詢語言,不是XML格式的語言,因此您應該在不同的步驟中考慮這一點。

  1. 首先,使用XPath查詢一個NodeList文件:

    NodeList list = (NodeList) xpath.evaluate(
        "//p[@class='goodstuff']", document, XPathConstants.NODESET); 
    
  2. 然後創建一個Transformer

    javax.xml.transform.TransformerFactory tfactory = 
        TransformerFactory.newInstance(); 
    javax.xml.transform.Transformer xform = tfactory.newTransformer(); 
    
  3. ,並用它來輸出的每個節點:

    for (int i = 0; i < list.getLength(); i++) { 
        Node node = list.item(i); 
        javax.xml.transform.Source src = new DOMSource(node); 
        java.io.StringWriter writer = new StringWriter(); 
        javax.xml.transform.Result result = new 
        javax.xml.transform.stream.StreamResult(writer); 
        xform.setOutputProperty(
        javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes"); 
        xform.transform(src, result); 
        System.out.println(writer.toString()); 
    } 
    
+0

好的,謝謝,我要去嘗試你的解決方案,我給你反饋... – user1546216 2012-07-24 06:59:11

+0

你的答案做我所需要的,謝謝。 – user1546216 2012-07-24 12:14:49