2012-07-23 67 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