将XML元素视为
<Person>
<contact phone="123" email="abc" address="abcde">Sid</contact>
<contact phone="987" email="cba" address="qwerty">Zid</contact>
</Person>
我想要一个xpath,它将打印具有第一个属性=“123”的联系节点,而不管属性名称如何。 / person / contact [@ * [position()= 1] =“123”]之类的东西。在这种情况下,它应该打印“Sid”。
答案 0 :(得分:2)
如果您使用/contact/@*[1]
,您可能会得到您想要的。但请记住,属性不是有序的(分别为"The relative order of attribute nodes is implementation-dependent."),因此不同的实现可能会为[1]
上的位置谓词@*
返回不同的属性。
XPath /Person/contact[@* = '123']
可能会解决您编辑的要求,因为它会选择具有值contact
的任何属性的'123'
元素。如前所述,您还可以使用位置谓词/Person/contact[@*[1] = '123']
,但结果可能取决于实现。
答案 1 :(得分:0)
假设您已经意识到由于Martin Honnen所提到的依赖属性顺序的逻辑而导致的问题,但仍然想要这样做,您可以尝试以下方法:
/Person/contact[@*[1][.='123']]
以上XPath选择具有第一个属性值等于<contact>
的{{1}}元素,无论属性名称如何。