繁体   English   中英

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

[英]how to use XPath to find the node value with CDATA tag in java

我使用XPath来解析rss xml数据,数据是

<rss version="2.0">
  <channel>
    <title>
      <![CDATA[sports news]]>
    </title>
  </channel>
</rss>  

我想使用xpath“/ rss / channel / title / text()”获取文本“体育新​​闻”,但结果不是我想要的,真正的结果是“\\ r \\ n”,所以如何找到结果我想要。

代码如下:

Document doc = 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();

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

您可以尝试将XPath表达式更改为

"string(/rss/channel/title)"

并使用返回类型STRING而不是NODE:

Node node = (Node) xPath.evaluate("string(/rss/channel/title)", doc,
                                  XPathConstants.STRING);

这样您就不会选择文本节点,而是选择title元素的字符串值,该值由其所有后代文本节点的串联组成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM