20

拥有这个(简化的)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

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

4

3 回答 3

45

您可以在 XPath 表达式中使用联合。只需使用运算符:|

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

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

于 2012-06-14T20:09:54.583 回答
6

使用

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

这指定了两个单独的 XPath 表达式的结果的联合|——使用标准的 XPath 联合运算符。选择的是作为 XML 文档顶部元素的孙元素的name子元素的所有子元素,以及Placemark作为 XML 文档顶部元素的孙元素的孙元素的所有子元素。coordinatesPlacemark

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

于 2012-06-15T01:37:46.303 回答
0

已解决://地标/*[self::name or descendant::coordinates]

于 2016-06-30T06:15:58.823 回答