随笔-7  评论-15  文章-0  trackbacks-0
 

一些基本的语法规则:

·         XQuery对大小写敏感

·         XQuery的元素、属性以及变量必须是合法的XML名称。

·         XQuery字符串值可使用单引号或双引号。

·         XQuery变量由“$”并跟随一个名称来进行定义,举例,$bookstore

·         XQuery注释被(:和:)分割,举例,(: XQuery 注释 :)

XQuery 条件表达式

"If-Then-Else"可以在XQuery中使用。

请看下面的例子:

for $x in doc("books.xml")/bookstore/book

return if ($x/@category="CHILDREN")

 then <child>{data($x/title)}</child>

 else <adult>{data($x/title)}</adult>

请注意"If-Then-Else"的语法:if表达式后的圆括号是必需的。else也是必需的,不过仅仅写“else ()”也是可以的。

上面的例子的结果:

<adult>Everyday Italian</adult>

<child>Harry Potter</child>

<adult>Learning XML</adult>

<adult>XQuery Kick Start</adult>


 

XQuery 比较

XQuery中,有两种方法来比较值。
 

1.  通用比较:=, !=, <, <=, >, >=

 

2. 值的比较:eq、ne、lt、le、gt、ge

 

请看下面的XQuery表达式:

$bookstore//book/@q > 10

如果q属性的值大于10,上面的表达式的返回值为true

$bookstore//book/@q gt 10

如果仅返回一个q,且它的值大于10,那么表达式返回true。如果不止一个q被返回,则会发生错误。

 

向结果添加元素和属性

正如在前面一节看到的,我们可以在结果中引用输入文件中的元素和属性:

for $x in doc("books.xml")/bookstore/book/title

order by $x

return $x

上面的XQuery表达式会在结果中引用title元素和lang属性,就像这样:

<title lang="en">Everyday Italian</title>

<title lang="en">Harry Potter</title>

<title lang="en">Learning XML</title>

<title lang="en">XQuery Kick Start</title>

以上XQuery表达式返回title元素的方式和它们在输入文档中被描述的方式的相同的。

现在我们要向结果添加我们自己的元素和属性!

添加HTML元素和文本

现在,我们要向结果添加HTML元素。我们会把结果放在一个HTML列表中 - Now, we want to add some HTML elements to the result. We will put the result in an HTML list - together with some text:

<html>

<body>

<h1>Bookstore</h1>

<ul>

{

for $x in doc("books.xml")/bookstore/book

order by $x/title

return <li>{data($x/title)}. Category: {data($x/@category)}</li>>

}

</ul>

</body>

</html

以上XQuery表达式会生成下面的结果:    

<html>

<body>

<h1>Bookstore</h1>

<ul>

<li>Everyday Italian. Category: COOKING</li>

<li>Harry Potter. Category: CHILDREN</li>

<li>Learning XML. Category: WEB</li>

<li>XQuery Kick Start. Category: WEB</li>

</ul>

</body>

</html>

 

选择和过滤元素

正如在前面的章节看到的,我们使用路径表达式或FLWOR表达式来选去和过滤元素。

请看下面的FLWOR表达式:

for $x in doc("books.xml")/bookstore/book

where $x/price>30

order by $x/title

return $x/title

for

(可选) 向每个由in表达式返回的项目捆绑一个变量

let

(可选)

where

(可选) 设定一个条件

order by

(可选) 设定结果的排列顺序

return

规定在结果中返回的内容

for 语句

for语句可将变量捆绑到由in表达式返回的每个项目。for可产生迭代。在同一个FLWOR表达式中可存在多重for语句。

如需在一个for语句中循环指定的次数,您可使用关键词to:     

for $x in (1 to 5)

return <test>{$x}</test>

结果:

<test>1</test>

<test>2</test>

<test>3</test>

<test>4</test>

<test>5</test>

关键词at可被用来计算迭代:

for $x at $i in doc("books.xml")/bookstore/book/title

return <book>{$i}. {data($x)}</book>

结果:

<book>1. Everyday Italian</book>

<book>2. Harry Potter</book>

<book>3. XQuery Kick Start</book>

<book>4. Learning XML</book>

在for语句中同样允许多个in表达式。请使用逗号来分割每一个in表达式:

for $x in (10,20), $y in (100,200)

return <test>x={$x} and y={$y}</test>

结果:

<test>x=10 and y=100</test>

<test>x=10 and y=200</test>

<test>x=20 and y=100</test>

<test>x=20 and y=200</test>

 

let 语句

let语句可完成变量分配,并可避免多次重复相同的表达式。let语句不回导致迭代。

let $x := (1 to 5)

return <test>{$x}</test>   

结果   

<test>1 2 3 4 5</test>   

where 语句

where语句用于为结果设定一个或多个条件(criteria)。

where $x/price>30 and $x/price<100

order by 语句

order by语句用于规定结果的排序次序。此处,我们要根据category和title来对结果进行排序:

for $x in doc("books.xml")/bookstore/book

order by $x/@category, $x/title

return $x/title

结果:

<title lang="en">Harry Potter</title>

<title lang="en">Everyday Italian</title>

<title lang="en">Learning XML</title>

<title lang="en">XQuery Kick Start</title>

return 语句:

    

return语句规定要返回的内容。

for $x in doc("books.xml")/bookstore/book

return $x/title

结果:

<title lang="en">Everyday Italian</title>

<title lang="en">Harry Potter</title>

<title lang="en">XQuery Kick Start</title>

<title lang="en">Learning XML</title>

posted on 2009-10-07 17:46 脚踏实地 阅读(1598) 评论(1)  编辑  收藏 所属分类: start XQuery

评论:
# re: xquery语法学习(二)[未登录] 2011-08-14 12:09 | Jim
很基础,实际使用这些远远不够  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: