【发布时间】:2019-03-25 18:58:14
【问题描述】:
在 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>
上面的代码示例并没有准确地显示它在网络检查器中的外观,该节点的文本中有几个空行。这是它的真实外观的小屏幕截图。
为什么会这样?我该怎么办?
【问题讨论】:
-
如果使用
//*[@id="day1"]//span[contains(@class, 'day-time-clock')]/text()[normalize-space()]会怎样? -
@JaSON 这似乎已经解决了 :-) 你知道为什么吗? text() 是否为每一行返回一个新值,即使它们属于同一个元素(在同一个引号内)或类似的东西?
-
我猜你的初始 XPath 返回 2 个文本节点作为空字符串(
</div>之后的那个)也是一个跨度的子文本节点。您可以使用//*[@id="day1"]//span[contains(@class, 'day-time-clock')]/text()[1]仅选择所需的节点
标签: xpath