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>
这正是我们想要的结果!!@_@