<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)
但这并不会同时带来dt和dd,而只是带来了dt。
如果它必须是单个 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)
依次在每个节点的上下文中。