我正在尝试选择属性值大于1的标题值:
path="//book/price[@value >1]
我不确定如何仅选择元素价格的属性值大于1的标题。我是一名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>
更新
第一个查询是完美的,你能告诉我如何从嵌套元素中获取它吗?
<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>
答案 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