Como selecionar o enésimo item no XPath 1.0?
-
19-08-2019 - |
Pergunta
Eu tenho algumas consultas XML e XPath. Estou usando o Yahoo! Widgets, então estou usando o XPath 1.0.
Aqui está a essência do meu 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>
....
Agora ... se eu executar esta consulta:
"root/cat/movie/swf"
Recebo 42 resultados, todos os nós 'SWF' que estão corretos.
Se, no entanto, eu só quero o sexto, gostaria de poder fazer:
"root/cat/movie/swf[6]"
Mas eu recebo uma lista contendo 0 nós.
Estranhamente, o uso de [1] (e nenhum outro valor) produz minha lista de todos os 42 nós.
Claramente estou perdendo algo bastante fundamental aqui. Alguém vê o que é?
Solução
Eu me pergunto se você quer dizer:
"root/cat/movie[6]/swf"
(recebe o SWF do 6º filme)
ou alternativamente:
"(root/cat/movie/swf)[6]"
(encontra todos os elementos do filme/SWF e seleciona o 6º)
Quando cada filme tem exatamente um SWF, os dois são iguais; Se um filme tem zero ou múltiplos elementos SWF, eles são as duas consultas são sutilmente diferentes ...
Outras dicas
"root/cat/movie/swf[6]"
refere -se a cada sexto <swf>
nó em "root/cat/movie"
contexto.
Você tem apenas um <swf>
nó cada.
O que você quer dizer é:
"root/cat/movie[6]/swf"