假设我有一个如下所示的 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 数据模型,路径/a/b/text()[1]
应选择具有字符串值的文本节点
一些文字
这是一个换行符,一些空格,文本some text
后跟一个换行符和一些空格。