2

我有以下 XML:

<?xml version="1.0" encoding="UTF-8" ?>
<bookstore>
    <book>
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <account_number>1111 1111 1111 1111</account_number>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <book>
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <account_number>2222 2222 2222 2222</account_number>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book>
        <title lang="en">Learning XML</title>
        <author>Erik T. Ray</author>
        <account_number>3333 3333 3333 3333</account_number>
        <year>2003</year>
        <price>39.95</price>
    </book>
</bookstore>

我有兴趣找到account_number的 XPath值为2222 2222 2222 2222。请指导我如何让 XPath 知道标签及其值。

4

2 回答 2

3
//account_number[text()='neededValue']

这意味着所有account_number带有[neededValue].

如果您想为此使用 book 父元素:

//account_number[text()='neededValue']/ancestor::book/

然后:

//account_number[text()='neededValue']/ancestor::book/OPTION

哪里OPTION可以是title, author,yearprice,以便从具有特定帐号的那本书中获取其他元素。

于 2013-08-27T14:32:29.913 回答
2

.您可以在谓词中使用上下文节点[a=b],它将在与右侧部分“2222 2222 2222 2222”进行比较之前转换为字符串

//account_number[.="2222 2222 2222 2222"]

如果您想要一个基于其子值的父节点,您可以将您的 XPath 嵌套在另一个谓词中。例如,如果您想要所有具有特定帐号的书籍,您可以使用:

//book[account_number[.="2222 2222 2222 2222"]]

------                |-- child value test--|
   ^
   |   |----   matching child condition  -----|
   |
   +--- all book descendants from the root node

要获得这些书的标题,请继续前面的 XPathtitle

//book[account_number[.="2222 2222 2222 2222"]]/title

编辑:回到这个答案,有一个更简单的版本

//book[account_number="2222 2222 2222 2222"]/title

account_number节点在与比较之前被转换为其字符串内容"2222 2222 2222 2222"

于 2013-08-27T14:42:18.100 回答