如何选择不同级别的多个节点?

Ale*_*ias 16 xml xpath xml-parsing

拥有这个(简化的)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>
Run Code Online (Sandbox Code Playgroud)

如何选择每个地标的名称和坐标?现在我可以使用以下XPath表达式选择他们的名字:

//Document//Placemark//name
Run Code Online (Sandbox Code Playgroud)

如何在没有任何其他数据的情况下选择两者?

ton*_*edz 39

您可以在XPath表达式中使用union.只需使用运营商:|

//Document/Placemark/name | //Document/Placemark/Polygon/coordinates
Run Code Online (Sandbox Code Playgroud)

如果您不需要,请不要使用//(后代轴).使用//,这也可以://name | //coordinates.指定确切的路径在性能方面更好.


Dim*_*hev 5

用途:

/*/*/Placemark/name | /*/*/Placemark/*/coordinates
Run Code Online (Sandbox Code Playgroud)

这指定了两个单独的XPath表达式的结果的并集 - 使用标准的XPath联合运算符|.选择都name认为是儿童的元素Placemark是XML文档的顶级元素的孙子元素,再加上所有的coordinates是一个宏大的,子元素Placemark是XML文档的顶级元素的孙元素.

所选元素按文档顺序排列(尽管没有规范的W3C文档指定顺序),这意味着在评估结果中(通常是XmlNodeList类型),任何name元素都直接跟随其对应的coordinates元素.