#xpath
#xpath
Вопрос:
У меня есть несколько узлов с некоторым определенным атрибутом, и мне нужно выбрать один из них по индексу. Например, мне нужно выбрать второй <div>
с классом ‘test’ — //div[@class='test'][2]
не работает.
Есть ли способ выбрать узел с некоторым атрибутом по индексу? Как это сделать?
Ответ №1:
Это часто задаваемые вопросы.
В 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.
Смотрите здесь, я думаю, вам лучше всего изменить факторинг вашей структуры таким образом, чтобы порядок атрибутов ничего не описывал. Если вы можете предоставить более подробную информацию, мы могли бы предложить предложения.
РЕДАКТИРОВАТЬ: Перечитывая ваш пост, похоже, вы пытаетесь найти порядок узлов, а не порядок атрибутов. Порядок узлов разрешен, и ваш синтаксис выглядит нормально на первый взгляд. В каком программном обеспечении вы это делаете?
Комментарии:
1. Это была моя ошибка — анализатор скрыл теги. Я добавил правильное форматирование. Я использую расширение PHP DOM ua.php.net/manual/en/book.dom.php и, похоже, это расширение обеспечивает слабую реализацию XPath
2. Вы пробовали
//div[@class='test'][position()=2]