3

假设我有一个如下所示的 XML:

<a>
  <b>
     <![CDATA[some text]]>
     <c>xxx</c>
     <d>yyy</d>
  </b>
</a>

我找不到获取“一些文本”的方法。任何想法?

如果我使用“a/b”,它也会返回 xxx 和 yyy 如果我使用“a/b/text()”,它什么也不返回

4

2 回答 2

3

您实际上不能选择 CDATA 部分:CDATA 只是告诉解析器避免转义特殊字符的一种方式,并且您的输入文档看起来与 XPath 完全相同:

<a>
  <b>
     some text
     <c>xxx</c>
     <d>yyy</d>
  </b>
</a>

(话虽如此,如果您使用的是 DOM,那么某些 DOM XPath 引擎无法正确实现规范,并将 CDATA 内容视为与 CDATA 部分之外的文本分开的文本节点)。

XPath 表达式 a/b/text() 应该选择三个文本节点,其中第一个包含“一些文本”以及周围的空白。

于 2013-11-02T18:54:10.980 回答
0

对于 XPath 数据模型,路径/a/b/text()[1]应选择具有字符串值的文本节点

一些文字

这是一个换行符,一些空格,文本some text后跟一个换行符和一些空格。

于 2013-11-02T18:34:57.970 回答