如何在XPath中忽略label标签?仅提取指定HTML中的test文本
解决方案:提取纯"test"文本的XPath表达式
你的问题出在原来的XPath选中了外层<label>元素,所以会返回该元素下的所有内容(包括子<label>里的*和目标文本)。要单独提取包含"test"的文本节点,可以用以下几种方式:
精准定位文本节点:
normalize-space(//label[label/text()='*']/text()[last()])这个表达式的逻辑是:
- 先找到包含子
<label>(文本为*)的外层<label> - 选取该外层
<label>的最后一个子文本节点(就是包含"test"的那个节点) - 用
normalize-space()去掉文本里的 和多余空白,得到纯"test"
- 先找到包含子
另一种等价写法:
如果确定结构固定,也可以直接定位到目标文本节点并过滤:(//label/text()[normalize-space()='test'])[1]这个表达式会直接选取所有
<label>下的文本节点中,经过normalize-space()后等于"test"的第一个节点。
验证说明
针对你提供的HTML结构:
<html> <script> </script> <body> <label> <label>*</label> test  </label> </body> </html>
使用上面的XPath表达式,会精准返回纯文本test,不会包含子<label>里的*。
内容的提问来源于stack exchange,提问作者Sainath pawar
相关产品推荐
相关产品推荐

