Marklogic学习 —— XQuery语法
来源:互联网 发布:javascript编程实战 编辑:程序博客网 时间:2024/04/29 23:26
摘要: Marklogic支持多种语言,XQuery作为一种流行方式,在Marklogic的官网http://www.marklogic.com中多有推荐,本节从XQuery的FLWOR 语法入题,通过一个个实例演示XQuery的使用场景。
数据准备
- 产品目录文件 catalog.xml
<catalog> <product dept="鄂尔多斯"> <number>100873</number> <name language="cn">连衣裙</name> <colorChoices>米色</colorChoices> </product> <product dept="南极人"> <number>6380</number> <name language="cn">毛呢外套</name> </product> <product dept="美够"> <number>4954</number> <name language="cn">半身裙</name> </product> <product dept="美够"> <number>2561</number> <name language="cn">百褶裙</name> </product> <product dept="果国际"> <number>1697</number> <name language="cn">牛仔裤</name> <colorChoices>蓝色</colorChoices> <desc>我最喜欢<i>A字裙</i></desc> </product></catalog>
- 产品价格文件 prices.xml
<prices> <priceList effDate="2016-10-13"> <prod num="100873"> <price currency="RMB">299</price> <discount type="CLR">10.00</discount> </prod> <prod num="6380"> <price currency="RMB">699</price> </prod> <prod num="4954"> <price currency="RMB">99</price> <discount type="CLR">3.99</discount> </prod> </priceList></prices>
- 商品订单文件 order.xml
<order num="1010598248" date="2016-09-15"> <item dept="鄂尔多斯" num="100873" quantity="1" color="米色"/> <item dept="美够" num="4954" quantity="1"/> <item dept="美够" num="2561" quantity="2"/> <item dept="果国际" num="1697" quantity="1" color="白色"/> <item dept="果国际" num="1697" quantity="1" color="蓝色"/> <item dept="南极人" num="6380" quantity="1" color="黑色"/></order>
语法举例
- 完整的FLWOR语法
for $prod in fn:doc("catalog.xml")/catalog/productlet $name := $prod/namewhere $prod/@dept = "美够"order by $prod/numberreturn $name
得到的结果是两个数组形式的Element
<name language="cn">百褶裙</name><name language="cn">半身裙</name>
- 简化FLWOR语句
for $prod in doc("catalog.xml")/catalog/productwhere $prod/@dept = "美够"order by $prod/numberreturn $prod/name
在Marklogic语法中,命名空间fn
可以省略;使用let
可以使代码更清新,但有时可以偷懒简化
- 继续简化
for $x in doc("catalog.xml")//product[@dept = "美够"]order by $x/numberreturn $x/name
有时候,能省则省,本来就是很简单的事情,干嘛搞的那么复杂呢?
- 可以把结果包装一下,使其变成一个node
<tr>{for $x in doc("catalog.xml")//product[@dept = "美够"]order by $x/numberreturn $x/name}</tr>
这样,就在整个结果集外面多了一层标签
<tr> <name language="cn">百褶裙</name> <name language="cn">半身裙</name></tr>
- 也可以对每一个单独的结果包装
<tr>{for $x in doc("catalog.xml")//product[@dept = "美够"]order by $x/numberreturn <td>{$x/name}</td>}</tr>
这个结果形式像不像HTML中的table样式
<tr> <td><name language="cn">百褶裙</name></td> <td><name language="cn">半身裙</name></td></tr>
- 如果只取Element中的数据
<tr>{for $x in doc("catalog.xml")//product[@dept = "美够"]order by $x/numberreturn <td>{data($x/name)}</td>}</tr>
可以使用fn:data
函数,或者fn:string
函数,或者类似这样的表达式<td>{$x/name/text()}</td>
<tr> <td>百褶裙</td> <td>半身裙</td></tr>
- 有时候,可能需要将多个XML组合成一个新的形式
for $item in doc("order.xml")//itemlet $name := doc("catalog.xml")//product[number = $item/@num]/namereturn <item num="{$item/@num}" name="{$name}"/>
将catalog数据与order数据结合,产生新的报表
<items> <item num="100873" name="连衣裙"></item> <item num="4954" name="半身裙"></item> <item num="2561" name="百褶裙"></item> <item num="1697" name="牛仔裤"></item> <item num="1697" name="牛仔裤"></item> <item num="6380" name="毛呢外套"></item></items>
0 0
- Marklogic学习 —— XQuery语法
- Marklogic学习 —— XQuery语法基础
- Marklogic学习 —— XQuery语法基础3
- Marklogic学习 —— XQuery语法之排序
- Marklogic学习 由浅入深(3)—— XML、XPath、XQuery
- Marklogic学习 由浅入深(C)—— Marklogic的方言XQuery Dialects
- Marklogic学习 由浅入深(6)—— XQuery增删改查
- Marklogic学习 由浅入深(2)—— 安装Marklogic Server
- Marklogic学习 由浅入深(B)—— Marklogic vs. Hadoop
- Marklogic学习 由浅入深(D)—— Marklogic vs. Oracle
- Marklogic学习 —— 灵活的数据模型
- Marklogic学习 —— 日志Log处理
- Marklogic学习 —— ACID事务
- Marklogic学习 —— 安装Marklogic9
- 7XML XQuery——语法
- Marklogic学习 由浅入深(A)—— Marklogic与MongoDB区别
- Marklogic学习 由浅入深(7)—— Marklogic应用开发指引
- Marklogic学习 由浅入深(8)—— 第一个Marklogic应用(上)
- 【CodeChef】Just multiply
- 结构型模式之外观模式
- hadoop RPC框架实现和NameNode的交互
- CodeForces 368C Sereja and Algorithm(dp)
- 菜单基本操作
- Marklogic学习 —— XQuery语法
- Ubuntu环境下安装JAVA8
- perl 正则前导字符
- 【Codewars-Pyramid Slide Down】(下三角矩阵求最长路径)
- HDU 5872 Seats 2016大连网赛
- Java-多线程机制详解(二)
- 关于闭包
- 贝叶斯决策在MNIST数据上的应用
- 结构型模式之适配器模式