在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检查器中的外观,该节点的文本中有几个空行。这是它的外观的小屏幕截图。
为什么会这样?那我该怎么办?
答案 0 :(得分:1)
您的span元素具有多个文本节点子级。一些文本节点子级仅包含空格。在您的示例中,外部span元素有一个包含“ .... 09:00 ....”的文本节点子元素,其中“ ....”代表空格,再加上紧跟在子元素{{1}之后的一个文本节点子元素}元素。 (顺便说一句,我的HTML生锈了,但我认为跨度内不允许使用div。)
您的第二个(内部)span元素不包含文本节点,因此,div
上应该什么也不选择。
通常,在XPath中使用/text()
是个坏主意,除非您有充分的理由并且确切地知道自己在做什么。