使用Xpath contains和string()来获取最里面的节点



这是html:

<div id="div_1">
<div id="div_2">
<span>today</span>
<span>tomorror</span>
</div>
</div>

我想得到最里面的节点,它的子节点包含字符串"todaytomorrow">

我可以使用$x('//*[contains(string((,"todaytomorrow"(]'(,但div_1和div_2都会返回。那么,我如何返回唯一的div_2,它是最里面的节点呢?

除非您在问题中对XML进行了不同的格式化,否则不清楚您尝试的XPath表达式实际上是如何在不考虑空白的情况下生成所述结果的。这个版本的初始尝试产生了所说的不希望的结果。

//*[contains(normalize-space(string()), "today tomorrow")]

您可以使用谓词对此进行修改,以删除除最后一个选定节点之外的所有节点:

(//*[contains(normalize-space(string()), "today tomorrow")])[last()]

如果原始XPath表达式真的为您选择了两个节点,那么您可以修改原始表达式,如:

(//*[contains(string(), "todaytomorrow")])[last()]

正如其他评论中所建议的,肯定还有其他解决方案,比如那些利用text((和string((节点测试之间差异的解决方案。

最新更新