拥有这个(简化的)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
如何在没有任何其他数据的情况下选择两者?
答案 0 :(得分:38)
您可以在XPath表达式中使用union。只需使用运算符:|
//Document/Placemark/name | //Document/Placemark/Polygon/coordinates
如果您不需要,请不要使用//
(后代轴)。使用//
,这也可以://name | //coordinates
。指定确切的路径在性能方面更好。
答案 1 :(得分:5)
使用强>:
/*/*/Placemark/name | /*/*/Placemark/*/coordinates
这指定了两个单独的XPath表达式的结果的 union - 使用了标准的XPath联合运算符|
。选定的是name
元素的所有Placemark
个元素,这些元素是XML文档顶部元素的孙子, plus 所有coordinates
元素一个Placemark
元素的孙子,它是XML文档顶层元素的孙。
所选元素按文档顺序排列(尽管没有规范的W3C文档指定顺序),这意味着在评估结果中(通常是XmlNodeList类型),任何name
元素后面紧跟其对应的{ {1}}元素。
答案 2 :(得分:0)
已解决://地标/ * [自我::名称或后代::坐标]