如何匹配通过子节点继续的文本序列(例如,使用sgml样式的标记)?

时间:2010-11-23 00:07:49

标签: xpath

<bits>
  <thing>Match this please</thing>
  <thing>Don't match this</thing>
  <thing>Match <b>this</b> please</thing>
</bits>

这样的表达式:

//thing[text()='Match this please']

将找到第一个“东西”而不是第三个,因为该短语是通过子节点分发的。

我的示例中是否有与第一个第三个​​'东西'匹配的表达式?

2 个答案:

答案 0 :(得分:3)

尝试:

//thing[string()='Match this please']

的jsfiddle:

请检查参考,看看这是否适用于您:

答案 1 :(得分:1)

  

是否有表达   匹配第一个和第三个'东西'   在我的例子中?

你的意思是:是否有一个表达式选择第一个和第三个名为thing的元素,基于它们的字符串值。

使用

/*/thing[. = 'Match this please']

谓词将上下文节点的字符串值与字符串"Match this please"进行比较。

根据定义,string value of an element是所有文本节点后代的连接(按文档顺序)

注意始终尽量避免使用//缩写,因为它的使用可能会导致效率低下。每当知道XML文档的结构时,请使用一系列特定的位置步骤。