计算所有属性的Xpath?
我可能在尝试做一些无效的事情,但可能有比我更聪明的人知道正确的语法来解决我的问题。 给定:计算所有属性的Xpath?,xpath,attributes,Xpath,Attributes,我可能在尝试做一些无效的事情,但可能有比我更聪明的人知道正确的语法来解决我的问题。 给定: 1000 500 如果我使用/*[@code=“vehicle”]/*[@code=“car”]//*[@code=“price”],我将返回两个框(1000.00和500.00)——如预期,但不是我想要的 是否有一种xpath语法可以针对所有具有@code属性的节点进行计算,而不是跳过它,如果它与最终结果不匹配,即我只返回第一个框(价格为1000.00)?像询问一样,选择第一个节点为@code且@co
1000
500
如果我使用/*[@code=“vehicle”]/*[@code=“car”]//*[@code=“price”]
,我将返回两个框(1000.00和500.00)——如预期,但不是我想要的
是否有一种xpath语法可以针对所有具有@code属性的节点进行计算,而不是跳过它,如果它与最终结果不匹配,即我只返回第一个框(价格为1000.00)?像询问一样,选择第一个节点为@code且@code必须等于“vehicle”,然后选择下一个节点为@code且@code必须等于“car”,然后选择下一个节点为@code且@code必须等于“price”。不是xpath方面的专家,但XmlSpy似乎表明这是可行的
(//*[@code="vehicle"]//*[@code="car"]//*[@code="price"])[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'
)
]
)
]
这对我来说没用,但我明白我的解释是如何得出你的答案的。虽然union操作符确实得到了所有三个匹配的节点,这听起来可能像我所要求的,但我只寻找最深的节点
1000.00
,其中上面@code的每个外观都与xpath表达式匹配。我不想让第二个盒子匹配,因为它在路径中有“运动”,因此无效。另一种思考方式是:我想要一个框,其中每个@代码都与标准匹配,并且只有在那里才匹配。我把这个框拉到了我原始文档的一个片段上,它看起来非常有希望。我将在一些更复杂的场景中尝试它,看看它是否适用于我的所有排列。谢谢,迪米特。不幸的是,这对我不起作用。如果
节点的顺序被切换,那么我将得到错误的节点。根据Dimitre的回答,对我来说,稍加修改的表达式(b/c它维护层次结构中的顺序)是/*[@code=“vehicle”]/*[@code=“car”]/*[@code=“car”]/*[(@code=“price”)而不是(祖先:*[@code=“vehicle”或@code=“car”或@code=“price”)])
"//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'
)
]
)
]