如何通过文本选择节点省略节点的childes'文本

时间:2014-11-08 10:36:09

标签: html xpath

我有以下代码,我想按文字选择标签。由于两个原因,我无法使用//label[text()='some label']//label[text()='other label']

  • '// label [text()]'返回当前节点的全部内容,包括 span的内容,
  • 白色空间。

我可以使用contains()函数,但我真的不想这样做。

<label>
<span>some span</span>
  some label   
</label>

<label>
    other label
<span>other span</span>
</label>

已解决???

//label[normalize-space(text()) = 'some label']

但为什么这会剥离内部节点?我不明白。根据{{​​3}},只应移除空格,而不删除节点。

1 个答案:

答案 0 :(得分:0)

如果您使用

//label[text()[normalize-space() = 'some label']]

然后我希望你得到你想要的东西。然而,它也会选择像

这样的标签
<label>text1<span>span text</span>some label</label>

一般情况下,混合内容和几个带有XPath 1.0的子文本节点有点难以满足所有可能的情况,使用XPath 2.0可以//label[normalize-space(string-join(text(), '')) = 'some label']更精确。