我正在使用以下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]
然而,它返回一个空集。有人可以解释一下吗?
答案 0 :(得分:4)
您需要bookstore/book/author
更新:要将true
传递到XPATH
,您必须使用bookstore/book/author[true()]
author[true]
仅表示您希望获取具有author
子元素的所有true
元素。
您可以自己检查,尝试表达式
bookstore/book[author1]
vs 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>
答案 1 :(得分:0)
我希望以下查询返回所有作者:
bookstore/book/author[true]
然而,它返回一个空集。有人可以解释一下吗?
上面的表达式选择具有名为bookstore/book/author
的子元素的所有true
元素。在提供的XML文档中,没有author
元素具有名为true
的子元素 - 因此XPath表达式不会选择任何内容。
在评论中,OP要求:
但为什么
bookstore/book/author[true]
不起作用,因为如果是的话 类似于contains()
总是返回true的情况
contains()
永远不会返回(字符串)“true” - 它返回 boolean 值true()
- 这与字符串“true”不同。
<强>解释强>:
您对布尔值true()
到sting的序列化是字符串“true”这一事实感到困惑。
这个事实并不意味着字符串“true”和布尔值true()
是相同的。