xpath与兄弟姐妹和位置有多个标准

时间:2014-11-25 13:07:44

标签: xml xpath

我有以下xml文档。我想提取名为='Category'和value ='bb'的子数据的值,其后跟兄弟名称='WayPointNumber'。 我尝试过这样的事情:

//Data[[@name='Category' and ./value='bb'] and [/following-sibling::*[(@name='WayPointNumber')]]]/ExtendedData/Data[5]

但我总是得到一个错误:错误 - 无法评估XPath表达式:路径表达式中的意外标记“[”

语法是否正确?

<root>
 <ExtendedData>
      <Data name="Tournumber">
        <value>1</value>
      </Data>
      <Data name="Guide">
        <value>lago di garda</value>
      </Data>
      <Data name="Category">
        <value>Numbering</value>
      </Data>
      <Data name="Category">
        <value>bb</value>
      </Data>
      <Data name="WayPointNumber">
        <value>13</value>
      </Data>
      <Data name="Type">
        <value>POI</value>
      </Data>
      <Data name="Hashlink">
        <value>1_822606</value>
      </Data>
      <Data name="LocalId">
        <value>822606</value>
      </Data>
 </ExtendedData>
 <ExtendedData>
      <Data name="Tournumber">
        <value>1</value>
      </Data>
      <Data name="Guide">
        <value>lago di garda</value>
      </Data>
      <Data name="Category">
        <value>Numbering</value>
      </Data>
      <Data name="WayPointNumber">
        <value>14</value>
      </Data>
      <Data name="Type">
        <value>POI</value>
      </Data>
      <Data name="Hashlink">
        <value>1_822557</value>
      </Data>
      <Data name="LocalId">
        <value>822557</value>
      </Data>
 </ExtendedData>
</root>

1 个答案:

答案 0 :(得分:0)

  

我想提取名为=&#39;类别&#39;的子数据的值。和价值=&#39; bb&#39;以下兄弟名称=&#39; WayPointNumber&#39;。

我认为你这太复杂了。使用以下路径表达式:

/root/ExtendedData/Data[@name = 'Category' and value = 'bb' and following-sibling::Data[@name = 'WayPointNumber']]

评估XPath表达式,例如使用bash shell中的xpath命令:

$ xpath a.xml '/root/ExtendedData/Data[@name = "Category" and value = "bb" and following-sibling::Data[@name = "WayPointNumber"]]'

然后,结果将是:

Found 1 nodes:
-- NODE --
<Data name="Category">
  <value>bb</value>
</Data>