java中如何使用XPath查找带有CDATA标签的节点值

use*_*434 5 java xml xpath

我用XPath解析了rss xml数据,数据是

<rss version="2.0">
  <channel>
    <title>
      <![CDATA[sports news]]>
    </title>
  </channel>
</rss>  
Run Code Online (Sandbox Code Playgroud)

我想使用 xpath "/rss/channel/title/text()" 获取文本 "sports news" ,但结果不是我想要的,真正的结果是 "\r\n",那么如何找到结果我想要。

代码如下:

    文档文档 = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
    XPathFactory xpathFactory = XPathFactory.newInstance();
    XPath xPath = xpathFactory.newXPath();
    Node node = (Node) xPath.evaluate("/rss/channel/title/text()", doc,XPathConstants.NODE);
    String title = node.getNodeValue();

pru*_*nge 4

尝试在 DocumentBuilderFactory 上调用setCoalescing(true) ,这会将所有 CDATA/文本节点折叠为单个节点。

  • 正式地,在 XPath 数据模型中,文本节点永远不会分割成多个片段,因此您的查询应该返回您期望的结果。实际上,一些在 DOM 上工作的 XPath 实现将无法连接相邻的文本节点。一种解决方案是避免使用 text()(而是在元素上使用 string());另一种是按照建议使用 setCoalescing() ;第三种是使用一致的 XPath 处理器,例如 Saxon。 (2认同)