首页 文章

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

提问于
浏览
0

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

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

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

我的优先事项是

  • 学习XML

  • 超级XML

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>

Update

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

<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 回答

  • 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 为目标 . 在这种情况下,当前节点是价格,没有兄弟姐妹,但 parent 可能的价格 . 为了以上面给出的不同方式得到相同的结果,可以获得 parent 的价格,然后是 preceding-sibling 的可能价格:

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

    结果相同 .

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

相关问题