我可能会尝试在这里做一些无效的事情,但也许比我聪明的人知道解决我问题的正确语法。 给出:
<group code="vehicle">
<line code="car">
<cell>
<box code="price">1000.00</box>
</cell>
</line>
<line code="car">
<cell code="sports">
<box code="price">500.00</box>
</cell>
</line>
</group>
如果我使用//*[@code="vehicle"]//*[@code="car"]//*[@code="price"]
,我将返回两个框(1000.00和500.00) - 正如所料,但不是我想要的。
是否有一个xpath语法将针对具有@code属性的所有节点进行评估,而不是如果它与最终结果不匹配则跳过它,因为我只返回第一个盒子(价格1000.00)?就像问一样,选择带@code的第一个节点,@ code必须等于“vehicle”,然后用@code选择下一个节点,@code必须等于“car”,然后用@code和@code选择下一个节点等于“价格”。
答案 0 :(得分:1)
使用强>:
"//box
[(@code='car' or @code='price' or @code='vehicle')
and
not(
ancestor-or-self::*
[
@code
and
not(@code='car'
or
@code='price'
or
@code='vehicle'
)
]
)
]
答案 1 :(得分:-1)
不是xpath的专家,但XmlSpy似乎表明这会起作用吗?
(//*[@code="vehicle"]//*[@code="car"]//*[@code="price"])[1]