XQuery 选择元素

  • 定义和使用

    在下面的示例中,我们将使用 “books.xml” 文档(与前几章相同的XML文件)。
    如前几章所述,我们正在选择和过滤具有 Path 表达式或 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 子句中的表达式中也可以包含多个;使用逗号分隔表达式中的每个:
    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 子句

    接下来,我们要将 category 属性用作 HTML 列表中的 class 属性:let 子句允许变量分配,并且避免多次重复同一表达式。 let 子句不会导致迭代。
    let $x:= (1 to 5)
    return <test>{$x}</test>
    上面的表达式将产生以下结果:
    <test>1 2 3 4 5</test>
  • where 子句

    where 子句用于为结果指定一个或多个条件:
    where $x/price>30 and $x/price<100
  • order by 子句

    order by 子句用于指定结果的排序顺序;在这里,我们要按类别和标题对结果进行排序:
    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>