假设我有一个如下所示的 XML:
<a>
<b>
<![CDATA[some text]]>
<c>xxx</c>
<d>yyy</d>
</b>
</a>
我找不到获得“一些文字”的方法。任何的想法?
如果我正在使用 “a/b”它也返回 xxx 和 yyy
如果我正在使用 "a/b/text()"它什么都不返回
最佳答案
您实际上无法选择 CDATA 部分:CDATA 只是告诉解析器避免转义特殊字符的一种方式,并且您的输入文档在 XPath 中看起来与以下完全相同:
<a>
<b>
some text
<c>xxx</c>
<d>yyy</d>
</b>
</a>
(话虽如此,如果您使用 DOM,那么某些 DOM XPath 引擎无法正确实现规范,并将 CDATA 内容视为与 CDATA 部分之外的文本分开的文本节点)。
XPath 表达式 a/b/text() 应该选择三个文本节点,其中第一个包含“一些文本”以及周围的空白。
关于xpath - 当一些 child 存在时选择 CDATA 内容的 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19745210/