XQuery笔记(二)-- FLWOR 表达式

FLWOR 是 "For, Let, Where, Order by, Return" 的只取首字母缩写。

一、用FLWOR 表达式来查询

例子:dept.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<table>
  <row>
    <DEPTNO>15</DEPTNO>
    <DNAME>ACCOUNTING</DNAME>
    <LOC>NEW YORK</LOC>
  </row>
  <row>
    <DEPTNO>20</DEPTNO>
    <DNAME>RESEARCH</DNAME>
    <LOC>DALLAS</LOC>
  </row>
  <row>
    <DEPTNO>30</DEPTNO>
    <DNAME>SALES</DNAME>
    <LOC>CHICAGO</LOC>
  </row>
  <row>
    <DEPTNO>40</DEPTNO>
    <DNAME>OPERATIONS</DNAME>
    <LOC>BOSTON</LOC>
  </row>
</table>

查询语句:

 

for $x in doc("dept.xml")/table/row
where $x/DEPTNO > 20
return $x

结果:

 

<row>
  <DEPTNO>30</DEPTNO>
  <DNAME>SALES</DNAME>
  <LOC>CHICAGO</LOC>
</row>
<row>
  <DEPTNO>40</DEPTNO>
  <DNAME>OPERATIONS</DNAME>
  <LOC>BOSTON</LOC>
</row>

 

二、还可以通过FLWOR来排序:

 

for $x in doc("sample2/dept.xml")/table/row
where $x/DEPTNO > 20
order by $x/LOC
return $x

结果:

 

<row>
  <DEPTNO>40</DEPTNO>
  <DNAME>OPERATIONS</DNAME>
  <LOC>BOSTON</LOC>
</row>
<row>
  <DEPTNO>30</DEPTNO>
  <DNAME>SALES</DNAME>
  <LOC>CHICAGO</LOC>
</row>

 和第一个结果对比就知道变化了。

 

三、更神奇的是,在FLWOR中可以加入HTML元素

 

<ul>
{
 for $x in doc("sample2/dept.xml")/table/row
 where $x/DEPTNO > 20
 order by $x/LOC
 return <li>{$x/LOC}</li>
}
</ul>

 查询的结果是:

 

<ul>
  <li>
    <LOC>BOSTON</LOC>
  </li>
  <li>
    <LOC>CHICAGO</LOC>
  </li>
</ul>

 

 四、还是有标签,不好看,把它去掉:

 

<ul>
{
for $x in doc("sample2/dept.xml")/table/row
where $x/DEPTNO > 20
order by $x/LOC
return <li>{data($x/LOC)}</li>
}
</ul>

 结果:

 

<ul>
  <li>BOSTON</li>
  <li>CHICAGO</li>
</ul>

 这正是我们想要的结果!!@_@

 

 

你可能感兴趣的:(xml)