【问题标题】:Retrieve bare html from XPath query in Java从 Java 中的 XPath 查询中检索裸 html
【发布时间】:2012-07-21 21:07:51
【问题描述】:

我的问题是我需要从旨在获取 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 表达式)

提前致谢

【问题讨论】:

  • 解决方案是否必须基于 XPath?
  • 是的,我需要用 XPath 表达式获取 html。
  • JDK 中的 XPath 库不适合你吗?

标签: java xpath html-parsing


【解决方案1】:

您需要的不仅仅是 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());
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2011-11-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多