XQuery:如何跨元素获取内部元素
XQuery: how to cross elements to get to the internal elements
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<fortest>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</fortest>
</bookstore>
对于上面的例子,如果我想使用for语句获取所有<book>
元素,我需要2个for语句:
for $x in doc("test.xml")/xs:bookstore/book
return $x
for $x in doc("test.xml")/xs:bookstore/fortest/book
return $x
我们能否跨过 <fortest>
标签,仅使用一个 for
获取 <bookstore>
内的所有 <book>
元素?
我认为 doc("test.xml")//book
可以。你可以在这里阅读它:
http://www.w3schools.com/xsl/xpath_syntax.asp
正如另一个答案所指出的,您可以使用 //
到 select book
位于 任何级别深度 中的元素 bookstore
。
或者,如果您需要 XQuery 严格处理已发布的 2 个可能的结构,您可以像这样使用联合运算符:
for $x in doc("test.xml")/xs:bookstore/(self::xs:bookstore|fortest)/book
return $x
首先,注意for $x in EEE return $x
可以简化为EEE
。
其次,我不知道您代码中的 "xs:" 前缀有什么用。
所以(改编和简化@har07 的答案)你可以这样写:
doc("test.xml")/bookstore/(.|fortest)/book
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<fortest>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</fortest>
</bookstore>
对于上面的例子,如果我想使用for语句获取所有<book>
元素,我需要2个for语句:
for $x in doc("test.xml")/xs:bookstore/book
return $x
for $x in doc("test.xml")/xs:bookstore/fortest/book
return $x
我们能否跨过 <fortest>
标签,仅使用一个 for
获取 <bookstore>
内的所有 <book>
元素?
我认为 doc("test.xml")//book
可以。你可以在这里阅读它:
http://www.w3schools.com/xsl/xpath_syntax.asp
正如另一个答案所指出的,您可以使用 //
到 select book
位于 任何级别深度 中的元素 bookstore
。
或者,如果您需要 XQuery 严格处理已发布的 2 个可能的结构,您可以像这样使用联合运算符:
for $x in doc("test.xml")/xs:bookstore/(self::xs:bookstore|fortest)/book
return $x
首先,注意for $x in EEE return $x
可以简化为EEE
。
其次,我不知道您代码中的 "xs:" 前缀有什么用。
所以(改编和简化@har07 的答案)你可以这样写:
doc("test.xml")/bookstore/(.|fortest)/book