1

我正在使用以下 xml 文档学习 XPath:http: //www.w3schools.com/xpath/xpath_examples.asp

现在,当我执行查询时:

bookstore/book/author[contains(.,'G')]

我得到了结果:Giada De Laurentiis, James McGovern正如预期的那样。现在,由于contains()返回一个布尔值,我希望以下查询返回所有作者:

bookstore/book/author[true]

但是,它返回一个空集。有人可以解释一下吗?

4

2 回答 2

4

你需要bookstore/book/author

更新:传递trueXPATH你必须使用bookstore/book/author[true()]
author[true]只是意味着你想要获得所有author具有子元素的true元素。

可以自己查,试试表情

bookstore/book[author1]对比bookstore/book[author]

第一个没有返回任何内容,因为没有book包含子元素的author1元素。第二个返回所有元素。但是如果你author从一些书籍节点中删除子节点,你将只得到那些有子节点的author

所以如果你像这样使用xml

<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>
    </book>
</bookstore>

然后 bookstore/book[author]返回

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

bookstore/book[title]返回

<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>
</book>
于 2012-11-02T07:18:07.490 回答
0

我希望以下查询返回所有作者:

bookstore/book/author[true]

但是,它返回一个空集。有人可以解释一下吗?

上面的表达式选择所有bookstore/book/author具有名为 的子元素的元素true。在提供的 XML 文档中,没有author元素有一个名为的子元素true——因此 XPath 表达式没有选择任何内容。

在评论中,OP 询问

但是为什么不起作用bookstore/book/author[true],因为if类似于contains()总是返回true时的情况

contains()从不返回(字符串)“true”——它返回布尔true()——这与字符串“true”不同。

说明

true()您对布尔值序列化为字符串是字符串“true”这一事实感到困惑。

这个事实并不意味着字符串“true”和布尔值true()是相同的。

于 2012-11-02T12:45:59.370 回答