Xml XPath:选择在指定类型的指定位置具有子元素的元素
查看以下XML示例:Xml XPath:选择在指定类型的指定位置具有子元素的元素,xml,xpath,Xml,Xpath,查看以下XML示例: <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <price>39.95</price> <title lang="eng"
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<price>39.95</price>
<title lang="eng">Learning XML</title>
</book>
</bookstore>
但是这个表达式不匹配,因为它选择的是至少有一个title元素和至少有两个price元素的所有书籍。如何更改此表达式以选择第一个子项为标题元素、第二个子项为价格元素的所有书籍?您可以通过获取
标题
子项并检查是否存在以下价格
同级:
//book[title/following-sibling::price]
演示(使用):
第一个表达式
//book[title/following sibling::price]
没有检查title
是否是第一个子项,因此它没有回答问题!第二个表达式是正确的,但可以被简化为//book[name(*[1])=“title”][name(*[2])=“price”]
@adamretter-yup,严格地说,第一个选项不是OP想要的,但它在提供的示例上工作,而且我喜欢这个解决方案:)谢谢
//book[title/following-sibling::price]
$ xmllint input.xml --xpath '//book[title/following-sibling::price]'
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
//book[name(*[1]) = "title" and name(*[2]) = "price"]