使XPath停在一定深度?

时间:2019-03-25 20:14:53

标签: xpath

我有以下HTML

<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 more text
                </div>
            </div>
        </span>

我想要一个仅获取文本 09:00 而不是更多文本而不使用text()[1]的XPath,因为这会导致其他问题。我当前的XPath看起来像这样

("//span[1][contains(@class, 'day-time-clock')]/text()")

我想要一个忽略HTML整个部分的

    <div class="tooltip-box first-free-tip ">
        <div class="tooltip-box-inner">
            <span class="fa fa-clock-o"></span>
            Some more text
        </div>
    </div>

3 个答案:

答案 0 :(得分:0)

使用normalize-space()选择文档的所有非空白节点:

//span[contains(@class, 'day-time-clock')]/text()[normalize-space()]

答案 1 :(得分:0)

您可以使用descendant::限制position()节点的级别。
因此,以下表达式确实有效:

span/descendant::node()[2 > position()]

根据您的需要调整谓词中的数字,2仅作为示例。这种方法的一个缺点是后代的计数仅对后代树中的第一个孩子准确。


另一种方法是限制两者:祖先和后代:

span/descendant::node()[3 > count(ancestor::*) and 1 > count(descendant::*)]

在这里,您还必须调整谓词中的数字以获得任何有用的结果。

答案 2 :(得分:0)

我认为(如果我理解正确的话)

"..//div[contains(@class, 'tooltip-box')]/parent::span"

将您带到那里。