XQuery:如何跨元素来获取内部元素

时间:2016-02-27 09:00:57

标签: xml xquery

<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 $x in doc("test.xml")/xs:bookstore/book
return $x

for $x in doc("test.xml")/xs:bookstore/fortest/book
return $x

我们可以跨越<fortest>代码,只使用一个<book>来获取<bookstore>内的所有for元素吗?

3 个答案:

答案 0 :(得分:1)

我认为doc("test.xml")//book会起作用。你可以在这里阅读它: http://www.w3schools.com/xsl/xpath_syntax.asp

答案 1 :(得分:1)

首先,请注意for $x in EEE return $x可以简化为EEE

其次,我不知道&#34; xs:&#34;代码中的前缀适用于。

所以(调整和简化@ har07的答案)你可以写:

doc("test.xml")/bookstore/(.|fortest)/book

答案 2 :(得分:0)

正如另一个答案中所指出的,您可以使用//选择book中位于任意级别深度bookstore元素。

或者,如果您需要XQuery严格遵循发布的2种可能结构,您可以像这样使用union运算符:

for $x in doc("test.xml")/xs:bookstore/(self::xs:bookstore|fortest)/book
return $x