web-dev-qa-db-ja.com

異なるレベルの複数のノードを選択するにはどうすればよいですか?

これを(単純化した)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>

各目印の名前と座標を選択するにはどうすればよいですか?現在、次のXPath式を使用して名前を選択できます。

//Document//Placemark//name

他のデータなしで両方を選択するにはどうすればよいですか?

XPath式で共用体を使用できます。演算子を使用するだけです:|

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

必要がない場合は、//descendant axis)を使用しないでください。 //を使用すると、これも機能します://name | //coordinates。正確なパスを指定する方がパフォーマンス面で優れています。

38
toniedzwiedz

使用

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

これは、2つの個別のXPath式の結果のunionを指定します-標準のXPathユニオン演算子| 使用されている。選択されているのは、XMLドキュメントの最上位要素の孫であるname要素の子であるすべてのPlacemark要素ですplusXMLドキュメントの最上位要素の孫であるcoordinates要素の孫であるすべてのPlacemark要素。

選択された要素はドキュメントの順序になります(ただし、標準のW3Cドキュメントでは順序が指定されていません)。つまり、評価の結果(通常はXmlNodeList型)の場合、name要素の直後に対応するcoordinates要素。

5

解決済み:// Placemark/* [self :: name or descendant :: coordinates]

0
luis long