XPath: Как выбрать node с некоторым атрибутом по индексу?
У меня есть несколько узлов с определенным атрибутом, и мне нужно выбрать один из них по индексу. Например, мне нужно выбрать второй <div>
с классом 'test' - //div[@class='test'][2]
не работает.
Есть ли способ выбрать node с некоторым атрибутом по индексу? Как это сделать?
Ответы
Ответ 1
Это FAQ.
В XPath оператор []
имеет более высокий приоритет (сильнее связывается), чем псевдо-оператор //
.
Из-за этого выражение:
//div[@class='test'][2]
выбирает все элементы div
, атрибут class
- это "test", а кто (элементы div
) являются вторым таким дочерним элементом div
своего родителя. Это не то, что вы хотите.
Использование
(//div[@class='test'])[2]
Ответ 2
Я полагаю, что в спецификации XML атрибуты не имеют порядка.
Note that the order of attribute specifications in a start-tag or empty-element tag is not significant.
См. здесь
Я думаю, что вам лучше всего перегруппировать свою структуру, чтобы порядок атрибутов ничего не описывал. Если вы можете дать более подробную информацию, мы можем предложить предложения.
EDIT: перечитав сообщение, похоже, что вы пытаетесь найти порядок node, а не порядок атрибутов. node разрешен, и ваш синтаксис выглядит ОК вне руки. Какое программное обеспечение вы делаете в этом?