首页 > 解决方案 > 将 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 检查器中的外观,该节点的文本中有几个空行。这是它的真实外观的小屏幕截图。

在此处输入图像描述

为什么会这样?我能做些什么呢?

标签: xpath

解决方案


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

您的第二个(内部)span 元素不包含文本节点,因此/text()不应选择任何内容。

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


推荐阅读