0

我的问题是我需要从旨在获取 html 文本部分的 XPath 表达式中检索原始 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 表达式)

提前致谢

4

1 回答 1

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());
    }
    
于 2012-07-23T18:48:59.723 回答