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 é?

Foi útil?

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"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top