2015-06-16 2 views
2

Рассмотрим XML-элемент какВозвращение первого атрибута элемента из 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"]. В этом случае он должен печатать «Сид».

+0

Как указывал Мартин, то, что вы просите, не определено в модели данных XPath. «Первый атрибут» - это не то, что XPath утверждает, что оно может доставить. Ваша реализация XPath может иметь «email» как «первый» атрибут для одного элемента «contact», а «адрес» - как «первый» атрибут на другом. Чтобы получить надежное решение, вам нужно будет найти разные критерии, для которых вам нужно посмотреть. «Сначала в алфавитном порядке имени атрибута» было бы четко определено, хотя этого было бы труднее достичь. – LarsH

ответ

2

Если вы используете /contact/@*[1], вы можете получить то, что хотите. Помните, однако, что атрибуты не упорядочены (соответственно "The relative order of attribute nodes is implementation-dependent."), поэтому разные реализации могут возвращать другой атрибут для позиционного предиката [1] на @*.

XPath /Person/contact[@* = '123'] может адресовать ваше отредактированное требование, поскольку он выбирает элемент contact, который имеет любой атрибут со значением '123'. Как уже указывалось, вы также можете использовать позиционный предикат /Person/contact[@*[1] = '123'], но результат может быть зависимым от реализации.

+0

Спасибо Мартин. Ценить это. Я обновил свой вопрос - сможете ли вы помочь? – siddarth

0

Предполагая, что вы в курсе возможных проблем, вызванных, опираясь на логику порядка атрибута как упомянуто Мартин Honnen, но по-прежнему хотите идти по этому пути, вы можете попробовать следующее:

/Person/contact[@*[1][.='123']] 

выше XPath select <contact> Элементы, имеющие первое значение атрибута, равны 123, независимо от имени атрибута.

Смежные вопросы