【发布时间】:2013-11-13 17:49:39
【问题描述】:
假设我有一个如下所示的 XML:
<a>
<b>
<![CDATA[some text]]>
<c>xxx</c>
<d>yyy</d>
</b>
</a>
我找不到获取“一些文本”的方法。有什么想法吗?
如果我使用 "a/b" 它还会返回 xxx 和 yyy 如果我使用 "a/b/text()" 它什么也不返回
【问题讨论】:
假设我有一个如下所示的 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后跟一个换行符和一些空格。
【讨论】: