xpath - 将 text() 添加到我的 XPath 时,结果的数量是重复的。为什么?
问题描述
在 Chrome 的 web 检查器中执行的以下 Xpath 返回预期的节点数 13
//*[@id="day1"]//span[contains(@class, 'day-time-clock')]
但是,当我向其中添加 text() 时:
//*[@id="day1"]//span[contains(@class, 'day-time-clock')]/text()
它返回 26 个节点。然而,只有每一个其他的命中实际上都指向源代码中的某个地方,其他的只是“麻木”。
端节点看起来像这样
<span class="medium bold day-time-clock">
09:00
<div class="tooltip-box first-free-tip ">
<div class="tooltip-box-inner">
<span class="fa fa-clock-o"></span>
Some text
</div>
</div>
</span>
上面的代码示例并未准确显示它在 Web 检查器中的外观,该节点的文本中有几个空行。这是它的真实外观的小屏幕截图。
为什么会这样?我能做些什么呢?
解决方案
您的 span 元素有多个文本节点子节点。一些文本节点子节点仅包含空格。在您的示例中,外部 span 元素具有一个包含“....09:00....”的文本节点子节点,其中“....”表示空格,以及紧跟在子div
元素之后的一个文本节点子节点。(顺便说一句,我的 HTML 是生锈的,但我不认为跨度内有一个 div 是允许的。)
您的第二个(内部)span 元素不包含文本节点,因此/text()
不应选择任何内容。
通常,/text()
在 XPath 中使用是个坏主意,除非您有充分的理由并且确切地知道自己在做什么。
推荐阅读
- optimization - 如何使用ortools在车辆路径问题中最小化每公里成本以及路径距离?
- python - Python 函数:可以将它们设为私有吗?
- spring-boot - 一个具有两个控制器(@RestController 和 @Controller)的实体类
- jms - Quarkus IBM MQ 扩展
- java - 显式类型转换为字节溢出
- jpos - jpos:如何处理具有不同标头和不同长度的消息,侦听相同的端点并使用相同的打包器
- python - XML 到 DateFrame Python
- mysql - 具有不同列顺序和不同 WHERE 条件的 SELECT 返回的行数多于总行数
- ios - 提供的 API 密钥已过期(对于 Directions API)
- java - 在 IntelliJ Idea 中包装方法调用