Как выбрать n-й элемент в xpath 1.0? - PullRequest
17 голосов
/ 18 марта 2009

У меня есть XML и запрос XPath. Я использую Yahoo! виджеты, поэтому я использую XPath 1.0.

Вот суть моего XML ...

<root>
    <cat num="SOURCE">
        <movie>
            <swf>speak.swf</swf> 
            <width>250</width> 
            <height>150</height> 
            <colour>cccccc</colour> 
        </movie>
        <movie>
            <swf>inertia.swf</swf> 
            <width>380</width> 
            <height>130</height> 
            <colour>9a9a9a</colour> 
        </movie>
        <movie>
            <swf>swing.swf</swf> 
            <width>380</width> 
            <height>130</height> 
            <colour>9A9A9A</colour> 
        </movie>
        ....

Сейчас ... если я выполню этот запрос:

"root/cat/movie/swf"

Я получаю 42 результата, все верные узлы 'swf'.

Если, однако, я просто хочу шестой, я бы хотел сделать:

"root/cat/movie/swf[6]"

Но я получаю список, содержащий 0 узлов.

Странно, но использование [1] (и никакого другого значения) дает мой список всех 42 узлов.

Очевидно, я упускаю что-то совершенно фундаментальное здесь. Кто-нибудь видит, что это такое?

Ответы [ 2 ]

34 голосов
/ 18 марта 2009

Интересно, если вы имеете в виду:

"root/cat/movie[6]/swf"

(получает SWF 6-го фильма)

или альтернативно:

"(root/cat/movie/swf)[6]"

(находит все элементы movie / swf и выбирает 6-й)

Когда в каждом фильме ровно один SWF, два одинаковы; если фильм имеет ноль или несколько элементов swf, они два запроса слегка различаются ...

9 голосов
/ 18 марта 2009
"root/cat/movie/swf[6]"

относится к каждому 6-му <swf> узлу в "root/cat/movie" контексте.

У вас есть только один <swf> узел.

Что вы имеете в виду:

"root/cat/movie[6]/swf"
...