Подтвердить что ты не робот

Выберите первый экземпляр только с XPath?

Я разбираю некоторый XML что-то вроде этого:

<root>
    <some_gunk/>
    <dupe_node>
        ...
        stuff I want
        ...
    </dupe_node>
    <bits_and_pieces/>
    <other_gunk/>
    <dupe_node>
        ...
        stuff I don't want
        ...
    </dupe_node>
    <more_gunk/>
</root>

XPath из '//dupe_node' даст мне два экземпляра dupe_node для воспроизведения. Я только хочу пройти первым. Могу ли я сделать это с помощью XPath?

4b9b3361

Ответ 1

/descendant::dupe_node[1]

//dupe_node[1], как правило, неверен, хотя в этом конкретном случае он дает идентичный результат. См. документы:

Путь местоположения //para [1] не означает то же, что и путь/потомок местоположения:: para [1]. Последний выбирает первый элемент-абзац-потомка; первый выбирает все элементы-потомки, которые являются первыми пара детьми своих родителей.

Учитывая следующий XML:

<foo>
    <bar/>
    <foo>
        <bar/>
    </foo>
</foo>

//bar[1] создаст два узла, потому что оба столбца являются первыми детьми их соответствующих родителей.

/descendant::bar[1] даст только один node, который является первым из всех баров в документе.

Ответ 2

//dupe_node[1]

XPath рассчитывает от 1, а не 0 в этом случае. Вы можете использовать этот инструмент, чтобы попробовать что-то в своем браузере:

http://www.xmlme.com/XpathTool.aspx?mid=82

Ответ 3

//dupe_node [1]