1

我在这里查看 w3c 书店 xpath 示例。

基于该xml:

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <bookstore>

    <book category="COOKING">
      <title lang="en">Everyday Italian</title>
      <author>Giada De Laurentiis</author>
      <year>2005</year>
      <price>30.00</price>
    </book>

    <book category="CHILDREN">
      <title lang="en">Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </book>

    <book category="WEB">
      <title lang="en">XQuery Kick Start</title>
      <author>James McGovern</author>
      <author>Per Bothner</author>
      <author>Kurt Cagle</author>
      <author>James Linn</author>
      <author>Vaidyanathan Nagarajan</author>
      <year>2003</year>
      <price>49.99</price>
    </book>

    <book category="WEB">
      <title lang="en">Learning XML</title>
      <author>Erik T. Ray</author>
      <year>2003</year>
      <price>39.95</price>
    </book>

</bookstore> 

我正在尝试使用 XPath 执行此操作:

“此 XML 文档是否有一本书的作者为 'James McGovern' 且价格为 '49.99' 并且此 XML 文档是否还有一本书的作者为 'Erik T. Ray' 且价格为 '39.95'

人类的说法是正确的,XPath 等价物是什么?是否可以跨兄弟节点运行表达式,如果可以,如何?

为了澄清,在其他语言中,可能会做这样的事情:

(author1 = 'James McGovern' and price1 = '49.99') and (author2 = 'Erik T. Ray' and price2 = '39.95')

其中 author1\price1 是以下项的子项: <book category="WEB">标题为:<title lang="en">XQuery Kick Start</title>

author2\price2 是以下的子级: <book category="WEB">标题:<title lang="en">Learning XML</title>

4

2 回答 2

1

更新

在您最后一次编辑之后,我终于得到了您正在尝试的内容:)。如果要确保两个节点都存在,可以使用以下查询:

boolean(/bookstore[book[price = "39.95" and author = "Erik T. Ray"] and book[price = "49.99" and author = "James McGovern"]])
于 2013-06-13T01:20:12.050 回答
1

只需对每本书执行比较,因此更新后的 XPath 为:

boolean(//book[author='James McGovern' and price='49.99']) and boolean(//book[author='Erik T. Ray' and price='39.95'])

或者如果有一个包含多个书店的文档,并且您想查找所有包含两本书的书店,您可以这样做:

/bookstore[book[author='James McGovern' and price='49.99'] and book[author='Erik T. Ray' and price='39.95']]
于 2013-06-13T01:20:36.320 回答