XPath:选择自身并随后同级

Uma*_* A. 5 html xpath

<div>
    <dt>
        Test 1
    </dt>
    <dd>
    </dd>
    <dt>
        Test 2
    </dt>
    <dd>
    </dd>
</div>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经编写了这个XPath

//dt[contains(text(), "Test")]/self::dt|following-sibling::dd
Run Code Online (Sandbox Code Playgroud)

但这并不会同时带来dtdd,而只是带来了dt

Ian*_*rts 5

如果它必须是单个 XPath 1.0 表达式,那么您必须说

//dt[contains(., 'Test')] | //dt[contains(., 'Test')]/following-sibling::dd[1]
Run Code Online (Sandbox Code Playgroud)

final[1]很重要,因为如果没有它,它将提取包含“Test”的 dt 之后的所有dd 元素,即给定

<div>
    <dt>
        Test 1
    </dt>
    <dd>
        Foo
    </dd>
    <dt>
        Something else 2
    </dt>
    <dd>
        Bar
    </dd>
</div>
Run Code Online (Sandbox Code Playgroud)

未经版本[1]将匹配三个节点,将dt包含“测试1”,两者的“富”与“酒吧”dd的元素。 使用[1]您将正确地只获得“Test 1”和“Foo”。

但是根据您使用 XPath 的确切方式,首先选择可能更清楚

<div>
    <dt>
        Test 1
    </dt>
    <dd>
        Foo
    </dd>
    <dt>
        Something else 2
    </dt>
    <dd>
        Bar
    </dd>
</div>
Run Code Online (Sandbox Code Playgroud)

然后迭代这个匹配的节点,并评估

//dt[contains(., 'Test')]
Run Code Online (Sandbox Code Playgroud)

依次在每个节点的上下文中。