当将text()添加到我的XPath时,结果数是重复的。为什么?

时间:2019-03-25 18:58:14

标签: 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检查器中的外观,该节点的文本中有几个空行。这是它的外观的小屏幕截图。

enter image description here

为什么会这样?那我该怎么办?

1 个答案:

答案 0 :(得分:1)

您的span元素具有多个文本节点子级。一些文本节点子级仅包含空格。在您的示例中,外部span元素有一个包含“ .... 09:00 ....”的文本节点子元素,其中“ ....”代表空格,再加上紧跟在子元素{{1}之后的一个文本节点子元素}元素。 (顺便说一句,我的HTML生锈了,但我认为跨度内不允许使用div。)

您的第二个(内部)span元素不包含文本节点,因此,div上应该什么也不选择。

通常,在XPath中使用/text()是个坏主意,除非您有充分的理由并且确切地知道自己在做什么。