使用xpath和一些标准从xml中提取坐标

时间:2014-11-20 16:50:16

标签: xml xpath

我花了几个小时寻找解决方案,但现在我需要你的帮助。可能你会开玩笑说我,但是......无论如何。 当xpath匹配crtiteria值= bnb

时,我想获取坐标和其他一些信息

我尝试了语法//数据/值[' bnb'] / ancestor :: Point / coordinates [text()],没有结果。

      <Placemark xmlns="">
    <name><![CDATA[Malcesine]]></name>
    <Point>
      <coordinates>10.8103913069,45.7645853643</coordinates>
    </Point>
    <ExtendedData>
      <Data name="tournumber">
        <value>1</value>
      </Data>
      <Data name="guidename">
        <value>Lake Garda</value>
      </Data>
      <Data name="category">
        <value>numeration</value>
      </Data>
      <Data name="category">
        <value>bnb</value>
      </Data>
      <Data name="WayPointNumber">
        <value>3</value>
      </Data>
    </ExtendedData>
  </Placemark>
  <Placemark xmlns="">
    <name><![CDATA[Gelateria Cento per cento]]></name>
    <Point>
      <coordinates>10.8087927103,45.7659774682</coordinates>
    </Point>
    <ExtendedData>
      <Data name="tournumber">
        <value>1</value>
      </Data>
      <Data name="guidename">
        <value>Lake Garda</value>
      </Data>
      <Data name="WayPointNumber">
        <value>3</value>
      </Data>
    </ExtendedData>
  </Placemark>

提前谢谢

1 个答案:

答案 0 :(得分:1)

不要尝试使用ancestor::重新启动树,而是将谓词放在Placemark上...

//Placemark[ExtendedData/Data/value='bnb']/Point/coordinates

大多数情况下,直接创建路径到路径然后添加谓词进行过滤更容易。所以你要从//Placemark/Point/coordinates开始。然后将其缩小到Placemark,其ExtendedData/Data/value等于bnb