选择其兄弟包含属性XML的元素

时间:2014-10-19 19:51:21

标签: xml xpath

我正在尝试选择属性值大于1的标题值:

path="//book/price[@value >1]

我不确定如何仅选择元素价格的属性值大于1的标题。我是一名XML初学者,我正在从教程中做一些练习。

我的优先事项是

  1. 学习XML
  2. super XML
  3. XML:

    <bookstore>
    <book>
      <title lang="en">Harry Potter</title>
      <price value="1">49.99</price>
    </book>
    <book>
     <title lang="en">Learning XML</title>
     <price value="2">29.95</price>
    </book>
    <book>
      <title lang="en">super xml</title>
      <price value="3">39.95</price>
    </book>
    </bookstore>
    

    更新

    第一个查询是完美的,你能告诉我如何从嵌套元素中获取它吗?

    <bookstore>
    <book>
      <title lang="en">Harry Potter</title>
      <possibleprice>
         <price value="1">49.99</price>
      </possibleprice>
    </book>
    <book>
      <title lang="en">Learning XML</title>
      <possibleprice>
         <price value="2">29.95</price>
      </possibleprice>
    </book>
    <book>
      <title lang="en">super xml</title>
      <possibleprice>
        <price value="3">39.95</price>
      </possibleprice>
    </book>
    </bookstore>
    

1 个答案:

答案 0 :(得分:3)

例如:

对于OP的第一个版本:

输入:

<bookstore>
<book>
  <title lang="en">Harry Potter</title>
  <price value="1">49.99</price>
</book>
<book>
 <title lang="en">Learning XML</title>
 <price value="2">29.95</price>
</book>
<book>
  <title lang="en">super xml</title>
  <price value="3">39.95</price>
</book>
</bookstore>

的XPath:

//book/price[@value > 1]/preceding-sibling::title

结果:

<title lang="en">Learning XML</title>
<title lang="en">super xml</title>

对于更新的第二个XML版本的OP,作为不同的示例:

XPath:

//book/possibleprice/price[@value > 1]/ancestor::book/title

与上述结果相同。

如果需要在第二个版本中使用previous-sibling两次,请回答评论中的问题:no。 preceding-sibling定位到当前节点的preceding-sibling。在这种情况下,当前节点是 price 且没有兄弟姐妹,但parent 可能价格。要以上面给出的不同方式获得相同的结果,可以获得价格的parent ,然后获取 possibleprice的preceding-sibling

//book/possibleprice/price[@value > 1]/parent::possibleprice/preceding-sibling::title

导致相同的结果。

如上所述,OP是XML的初学者,可能以下内容可用于说明XPath轴:http://www.xmlplease.com/axis