首页 文章

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

提问于
浏览
3

查看以下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>

使用XPath我不会选择所有书籍,第一个孩子是 Headers 元素,第二个孩子是价格元素 . 这将返回示例中的第一本书 .

我尝试了以下表达式:

book[title[1] and price[2]]

但是这个表达式并不匹配,因为它选择了至少有一个title元素和至少两个price元素的所有书籍 . 如何更改此表达式以选择所有书籍,其中第一个孩子是 Headers 元素,第二个孩子是价格元素?

1 回答

  • 1

    你可以通过获取 title 子进行检查是否存在以下 price 兄弟:

    //book[title/following-sibling::price]
    

    演示(使用xmllint):

    $ xmllint input.xml --xpath '//book[title/following-sibling::price]'
    <book>
            <title lang="eng">Harry Potter</title>
            <price>29.99</price>
    </book>
    

    另一种方法是检查 book 节点的第一个和第二个子节点的 name()

    //book[name(*[1]) = "title" and name(*[2]) = "price"]
    

相关问题