xpath - 当一些 child 存在时选择 CDATA 内容的 xpath

标签 xpath cdata

假设我有一个如下所示的 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/

相关文章:

php - 在XPath评估之前,如何处理字符串中的双引号?

java - 如何在 Xalan 扩展函数实现中计算 XPath 表达式?

python - 带有请求库的机器人框架 CDATA xml

xml - 使用 XSLT 转换 XML 并保留 CDATA(在 Ruby 中)

php - XPath:选择前 5 个元素

c#-4.0 - 循环遍历 HtmlAgilityPack 创建的节点

python - 无法使用lxml获取连接到特定标签的html元素

PHP XML 编辑 CDATA 节点

java - 如何使用 jdom 将 CDATA 应用于变压器参数

java将cdata添加到xml字符串