2015-08-31 2 views
2

Представьте себе HTML фрагмент следующим образом:Как выбрать второй элемент с тем же идентификатором атрибута в XPATH?

<div> 
    <div class="content">test1</div> 
</div> 
<div> 
    <div class="content">test2</div> 
</div> 
<div> 
    <div class="content">test3</div> 
</div> 

и XPath я использую //div[@class='content']

Теперь я хочу обратиться ко второму элементу DIV. Что я должен добавить в свой xpath? TIA.

+0

// DIV [@ класс = 'содержание'] [2] – splash58

ответ

6

До сих пор предлагалось два решения, но ни один из них не выбирает ничего из фрагмента 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> 
Смежные вопросы