我使用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();
答案 0 :(得分:3)
尝试在您的DocumentBuilderFactory上调用setCoalescing(true),这会将所有CDATA /文本节点折叠为单个节点。
答案 1 :(得分:0)
您可以尝试将XPath表达式更改为
"string(/rss/channel/title)"
并使用返回类型STRING而不是NODE:
Node node = (Node) xPath.evaluate("string(/rss/channel/title)", doc,
XPathConstants.STRING);
这样您就不会选择文本节点,而是选择title元素的字符串值,该值由其所有后代文本节点的串联组成。