До сих пор предлагалось два решения, но ни один из них не выбирает ничего из фрагмента HTML, который вы видите в вопросе. Когда просто обернув его в корневой элемент:
<root>
<div>
<div class="content">test1</div>
</div>
<div>
<div class="content">test2</div>
</div>
<div>
<div class="content">test3</div>
</div>
</root>
Оба //div[@class='content'][2]
и //div[2][@class='content']
выберите ничего из этого документа. Они оба предполагают, что второй предикат (между [
и ]
) применяется к промежуточной последовательности результатов, но второй предикат также применяется к узлам исходного дерева документа. Для того, чтобы выбрать подмножество результата "промежуточной", использовать круглые скобки вокруг первой части:
(//div[@class='content'])[2]
и один результат будет
<div class="content">test2</div>
Подробнее
//div[@class='content'][2]
средства:
Выделите все элементы с именем div
из любого места в документе, но только те, у которых есть атрибут class
, значение которого равно «содержимому». Из этих выбранных узлов сохраняются только те, которые являются вторым элементом div[@class = 'content']
их родителя.
Таким образом, это выражение будет выбрать только результат из следующего документа:
<root>
<div>
<div class="content">test1</div>
</div>
<div>
<div class="content">test2</div>
<div class="other">other</div>
<div class="content">MATCH</div>
</div>
<div>
<div class="content">test3</div>
</div>
</root>
//div[2][@class='content']
означает:
Выберите все элементы, называемые div
из любого места в документе, но только которые являются вторым ребенком их родителей. Из выбранных узлов сохраняются только те, у которых есть атрибут class
, значение которого равно «содержимому».
Только производство спички данного документа как
<root>
<div>
<div class="content">test1</div>
</div>
<div>
<div class="other">other</div>
<div class="content">MATCH</div>
</div>
<div>
<div class="content">test3</div>
</div>
</root>
// DIV [@ класс = 'содержание'] [2] – splash58