从XML返回元素的第一个属性

时间:2015-06-16 12:28:33

标签: xml xpath attributes xquery

将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”。

2 个答案:

答案 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}}元素,无论属性名称如何。