it-swarm.dev

Como selecionar vários nós em diferentes níveis?

Tendo este (simplificado) XML:

<?xml version="1.0" encoding="UTF-8"?>
<kml>
<Document>
        <Placemark>
            <name>Poly 1</name>
            <Polygon>
                        <coordinates>
                            -58.40844625779582,-34.60295278618136,0
                        </coordinates>
            </Polygon>
        </Placemark>
        <Placemark>
            <name>Poly 2</name>
            <Polygon>
                        <coordinates>
                            -58.40414334150432,-34.59992445476809,0
                        </coordinates>
            </Polygon>
        </Placemark>
</Document>
</kml>

Como posso selecionar o nome e as coordenadas de cada marcador? Agora posso selecionar seu nome com a seguinte expressão XPath:

//Document//Placemark//name

Como posso selecionar os dois sem outros dados?

15
Alejandro García Iglesias

Você pode usar uma união em sua expressão XPath. Basta usar o operador: |

//Document/Placemark/name | //Document/Placemark/Polygon/coordinates

Não use o // ( descendente axis) se você não precisa. Usando //, isso também funcionaria: //name | //coordinates. É melhor desempenho para especificar o caminho exato.

38
toniedzwiedz

Usar :

/*/*/Placemark/name | /*/*/Placemark/*/coordinates

Isso especifica o union dos resultados de duas expressões XPath separadas - o operador de união XPath padrão | é usado. Selected são todos os elementos name que são filhos de um elemento Placemark que é um neto do elemento top do documento XML, plus all coordinates elementos que são netos de um elemento Placemark que é um neto do elemento principal do documento XML.

Os elementos selecionados vêm em ordem de documento (embora nenhum documento W3C normativo especifique a ordem), o que significa que no resultado da avaliação (geralmente do tipo XmlNodeList) qualquer elemento name é diretamente seguido por seu elemento coordinates correspondente.

5
Dimitre Novatchev

Resolved: // Placemark/* [self :: name ou descendant :: coordinates]

0
luis long