Как выбрать n-й элемент в xpath 1.0?

17

У меня есть 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» узлы верны.

Если, однако, я просто хочу 6-го, я бы хотел:

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

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

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

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

    
задан izb 18.03.2009 в 12:26
источник

2 ответа

34

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

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

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

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

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

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

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

    
ответ дан Marc Gravell 18.03.2009 в 12:32
источник
  • Я имел в виду последнего. Благодарю. –  izb 18.03.2009 в 12:46
  • Важно отметить, что индексы основаны на 1. –  AndiDog 25.02.2013 в 09:50
9
"root/cat/movie/swf[6]"

ссылается на каждый 6-й <swf> в "root/cat/movie" .

У вас есть только один <swf> каждый.

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

"root/cat/movie[6]/swf"
    
ответ дан Tomalak 18.03.2009 в 12:32
источник
  • избили меня :) +1 для объяснения –  annakata 18.03.2009 в 12:33
  • Ах, конечно :) Pesky array-like нотация ... –  izb 18.03.2009 в 12:41