XPath-запрос для получения n-го экземпляра элемента

Существует HTML-файл (содержимое которого я не контролирую), который содержит несколько элементов input с одинаковым фиксированным id атрибут "search_query". Содержимое файла может измениться, но я знаю, что всегда хочу получить второй элемент input с атрибутом id "search_query"

Мне нужно выражение XPath для этого. Я пытался //input[@id="search_query"][2], но это не работает. Вот пример строки XML, где этот запрос не удался:

<div>
  <form>
    <input id="search_query" />
   </form>
</div>

<div>
  <form>
    <input id="search_query" />
  </form>
</div>

<div>
  <form>
    <input id="search_query" />
  </form>
</div>

Имейте в виду, что вышеприведенное является просто примером, а другой HTML-код может сильно отличаться, и могут появляться элементы input в любом месте с непоследовательной структурой документа (за исключением того, что я гарантирую, что всегда будет по крайней мере два элемента input с атрибутом id "search_query")

Какое правильное выражение XPath?

96 голосов | спросил rlandster 24 +04002010-10-24T11:29:52+04:00312010bEurope/MoscowSun, 24 Oct 2010 11:29:52 +0400 2010, 11:29:52

2 ответа


0

Это часто задаваемые вопросы :

//somexpression[$N]

означает «Найти каждый узел, выбранный с помощью //somexpression, то есть $N th потомок его родителя ".

То, что вы хотите, это :

(//input[@id="search_query"])[2]

Помните : оператор [] имеет более высокий приоритет (приоритет), чем оператор // аббревиатура.

ответил Dimitre Novatchev 24 +04002010-10-24T19:42:01+04:00312010bEurope/MoscowSun, 24 Oct 2010 19:42:01 +0400 2010, 19:42:01
0

Кажется, это работает:

/descendant::input[@id="search_query"][2]

Я беру это из «Справочника по программированию XSLT 2.0 и XPath 2.0, 4-е издание» Майкла Кея.

В разделе «Сокращенный синтаксис» спецификации языка путей XML есть примечание http://www.w3.org/TR/xpath/#path-abbrev , который дал подсказку.

ответил rlandster 24 +04002010-10-24T19:27:53+04:00312010bEurope/MoscowSun, 24 Oct 2010 19:27:53 +0400 2010, 19:27:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132