Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XPath:选择在指定类型的指定位置具有子元素的元素_Xml_Xpath - Fatal编程技术网

Xml XPath:选择在指定类型的指定位置具有子元素的元素

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"

查看以下XML示例:

<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"]