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