当一些子元素存在时,选择CDATA内容的xpath

时间:2013-11-02 18:20:15

标签: xpath cdata

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

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

我无法找到获得“某些文字”的方法。有什么想法吗?

如果我使用“a / b”,它还会返回xxx和yyy 如果我使用“a / b / text()”则不返回任何内容

2 个答案:

答案 0 :(得分: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()应该选择三个文本节点,其中第一个包含“some text”以及周围的空格。

答案 1 :(得分:0)

使用XPath数据模型,路径/a/b/text()[1]应选择具有字符串值

的文本节点

一些文字

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