如何用XPath查找包含指定文本节点的直接子元素?
解决XPath提取包含指定文本的子元素问题
我来帮你搞定这个XPath的问题!你的需求是提取父<div>下所有直接子元素中,不管文本是直接在自身节点还是嵌套在子节点里,只要包含文本“A”的节点对吧?
先分析你之前的表达式为啥不行
- 表达式
./*/*[contains(text(), 'A')]:这个是在找父节点的子元素的子节点(比如第一个<div>里的文本节点,或者<p>里的<b>标签),返回的是这些底层节点,而不是你要的<div>和<p>这两个直接子元素。 - 表达式
./*[./*[contains(text(), 'A')]]:这个只匹配那些**有子节点包含“A”**的直接子元素(也就是<p>),但漏掉了自身直接包含“A”的那个<div>,所以只能拿到一半结果。
正确的XPath表达式
./*[contains(., 'A')]
为啥这个能行?
这里的.代表当前节点的字符串值——也就是把该节点及其所有后代节点的文本内容拼接在一起后的结果。不管文本是直接写在<div>里,还是嵌套在<p>的<b>子节点里,整个元素的文本内容里只要包含“A”,就会被这个表达式匹配到。
用这个表达式测试你的HTML结构:
- 第一个直接子元素
<div>A</div>的字符串值是“A”,会被匹配; - 第二个直接子元素
<p><b>A</b></p>的字符串值也是“A”,会被匹配; - 第三个直接子元素
<span>B</span>的字符串值是“B”,不会被匹配。
完全符合你预期的返回结果~
内容的提问来源于stack exchange,提问作者Hirurg103
相关产品推荐
相关产品推荐

