Как выбрать n-й элемент в xpath 1.0?
У меня есть некоторые 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 ответа
Интересно, если вы имеете в виду:
"root/cat/movie[6]/swf"
(получает SWF 6-го фильма)
или альтернативно:
"(root/cat/movie/swf)[6]"
(находит все элементы фильма / SWF и выбирает 6-й)
Когда в каждом фильме ровно один SWF, два одинаковы; если фильм имеет ноль или несколько элементов SWF, они два запроса слегка различаются...
"root/cat/movie/swf[6]"
относится к каждому 6-му <swf>
узел в "root/cat/movie"
контекст.
У вас есть только один <swf>
узел каждый.
Что вы имеете в виду:
"root/cat/movie[6]/swf"