从Java中的XPath查询中检索裸html

时间:2012-07-23 15:36:48

标签: java xpath html-parsing

我的问题是我需要从XPath表达式中检索原始html,这些表达式旨在获取html的文本部分。 例如,如果我得到当前的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表达式最相似)

提前致谢

1 个答案:

答案 0 :(得分: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());
    }