此xquery脚本中的语法错误是什么?

此xquery脚本中的语法错误是什么?,xquery,Xquery,我是XQuery的初学者,尝试做一些简单的练习来学习它。但我试图组合的这个最新查询拒绝运行,这给了我一个语法错误 这是我的XQuery: <HTML> <HEAD><TITLE>Alphabetical Cities Lists</TITLE></HEAD> <BODY> { for $indcode in (65 to 70) let $indlet := codepoints-to-string($indcode

我是XQuery的初学者,尝试做一些简单的练习来学习它。但我试图组合的这个最新查询拒绝运行,这给了我一个语法错误

这是我的XQuery:

<HTML>
<HEAD><TITLE>Alphabetical Cities Lists</TITLE></HEAD>
<BODY>
{
  for $indcode in (65 to 70)
  let $indlet := codepoints-to-string($indcode)
  return 
     <H1> {$indlet} LIST </H1>
     {
       for $cit in doc("mydoc.xml")/CITIES/ENTITY
       where starts-with($cit/NAME,$indlet)
       order by $cit/NAME
       return <LI>{$cit/NAME}</LI>
     }
     </OL>
} 
</BODY>
</HTML>

按字母顺序排列的城市名单
{
对于$indcode in(65至70)
let$indlet:=指向字符串的代码点($indcode)
返回
{$indlet}列表
{
对于doc中的$cit(“mydoc.xml”)/CITIES/ENTITY
其中以($cit/NAME,$indlet)开头
按$cit/名称订购
返回
  • {$cit/NAME}
  • } }
    这是我的XML文件mydoc.XML的一个子集:

    <CITIES>
      <ENTITY>
        <NAME>Hastings</NAME>
        <CITYCOD>230</CITYCOD>
        <CNTYCOD>01</CNTYCOD>
      </ENTITY>
      <ENTITY>
        <NAME>Tilden</NAME>
        <CITYCOD>487</CITYCOD>
        <CNTYCOD>02</CNTYCOD>
      </ENTITY>
      <ENTITY>
        <NAME>Alliance</NAME>
        <CITYCOD>008</CITYCOD>
        <CNTYCOD>07</CNTYCOD>
      </ENTITY>
      <ENTITY>
        <NAME>Hemingford</NAME>
        <CITYCOD>236</CITYCOD>
        <CNTYCOD>07</CNTYCOD>
      </ENTITY>
      <ENTITY>
        <NAME>Ainsworth</NAME>
        <CITYCOD>003</CITYCOD>
        <CNTYCOD>09</CNTYCOD>
      </ENTITY>
      <ENTITY>
        <NAME>Kearney</NAME>
        <CITYCOD>269</CITYCOD>
        <CNTYCOD>10</CNTYCOD>
      </ENTITY>
      <ENTITY>
        <NAME>Oakland</NAME>
        <CITYCOD>358</CITYCOD>
        <CNTYCOD>11</CNTYCOD>
      </ENTITY>
      <ENTITY>
        <NAME>Eagle</NAME>
        <CITYCOD>159</CITYCOD>
        <CNTYCOD>13</CNTYCOD>
      </ENTITY>
    </CITIES>
    
    
    黑斯廷斯
    230
    01
    蒂尔登
    487
    02
    联盟
    008
    07
    海明福
    236
    07
    安斯沃思
    003
    09
    卡尼
    269
    10
    奥克兰
    358
    11
    鹰
    159
    13
    
    我想让它做的是打印出一个简单的HTML文档,其中包含几个城市名称的列表,以字母开头(a到F)

    但是,当我尝试在上运行此功能时,会出现以下错误:

    Query:,第9行第6列:[XPST0003]语法错误,意外的“{”,应为“}”

    我不知道它为什么这么说。我检查了又检查,但我的花括号看起来都很匹配。有人知道问题出在哪里吗?谢谢。

    您在第9行的{之前忘记了一个

    因此,它应该是:

    <HTML>
    <HEAD><TITLE>Alphabetical Cities Lists</TITLE></HEAD>
    <BODY>
    {
      for $indcode in (65 to 70)
      let $indlet := codepoints-to-string($indcode)
      return 
         <H1> {$indlet} LIST </H1>
         <OL>
         {
           for $cit in doc("mydoc.xml")/CITIES/ENTITY
           where starts-with($cit/NAME,$indlet)
           order by $cit/NAME
           return <LI>{$cit/NAME}</LI>
         }
         </OL>
    } 
    </BODY>
    </HTML>
    
    
    按字母顺序排列的城市名单
    {
    对于$indcode in(65至70)
    let$indlet:=指向字符串的代码点($indcode)
    返回
    {$indlet}列表
    {
    对于doc中的$cit(“mydoc.xml”)/CITIES/ENTITY
    其中以($cit/NAME,$indlet)开头
    按$cit/名称订购
    返回
  • {$cit/NAME}
  • } }
    您在第9行的{之前忘记了a

    因此,它应该是:

    <HTML>
    <HEAD><TITLE>Alphabetical Cities Lists</TITLE></HEAD>
    <BODY>
    {
      for $indcode in (65 to 70)
      let $indlet := codepoints-to-string($indcode)
      return 
         <H1> {$indlet} LIST </H1>
         <OL>
         {
           for $cit in doc("mydoc.xml")/CITIES/ENTITY
           where starts-with($cit/NAME,$indlet)
           order by $cit/NAME
           return <LI>{$cit/NAME}</LI>
         }
         </OL>
    } 
    </BODY>
    </HTML>
    
    
    按字母顺序排列的城市名单
    {
    对于$indcode in(65至70)
    let$indlet:=指向字符串的代码点($indcode)
    返回
    {$indlet}列表
    {
    对于doc中的$cit(“mydoc.xml”)/CITIES/ENTITY
    其中以($cit/NAME,$indlet)开头
    按$cit/名称订购
    返回
  • {$cit/NAME}
  • } }
    这是一个常见的错误

    您需要在
    节点之间放置一个

    单个节点是一个XQuery表达式(就像直接元素构造函数中的多个节点一样)。返回表达式必须是一个表达式。在这种情况下,您希望返回两个节点。每个节点都是单个项,因此为了返回它们,您需要按顺序连接两个节点

    查询如下所示:

    <HTML>
    <HEAD><TITLE>Alphabetical Cities Lists</TITLE></HEAD>
    <BODY>
    {
      for $indcode in (65 to 70)
      let $indlet := codepoints-to-string($indcode)
      return 
         (<H1> {$indlet} LIST </H1>,
         <OL>
         {
           for $cit in doc("mydoc.xml")/CITIES/ENTITY
           where starts-with($cit/NAME,$indlet)
           order by $cit/NAME
           return <LI>{$cit/NAME}</LI>
         }
         </OL>)
    } 
    </BODY>
    </HTML>
    
    
    按字母顺序排列的城市名单
    {
    对于$indcode in(65至70)
    let$indlet:=指向字符串的代码点($indcode)
    返回
    ({$indlet}列表,
    {
    对于doc中的$cit(“mydoc.xml”)/CITIES/ENTITY
    其中以($cit/NAME,$indlet)开头
    按$cit/名称订购
    返回
  • {$cit/NAME}
  • } ) }
    这是一个常见的错误

    您需要在
    节点之间放置一个

    单个节点是一个XQuery表达式(就像直接元素构造函数中的多个节点一样)。返回表达式必须是一个表达式。在这种情况下,您希望返回两个节点。每个节点都是单个项,因此为了返回它们,您需要按顺序连接两个节点

    查询如下所示:

    <HTML>
    <HEAD><TITLE>Alphabetical Cities Lists</TITLE></HEAD>
    <BODY>
    {
      for $indcode in (65 to 70)
      let $indlet := codepoints-to-string($indcode)
      return 
         (<H1> {$indlet} LIST </H1>,
         <OL>
         {
           for $cit in doc("mydoc.xml")/CITIES/ENTITY
           where starts-with($cit/NAME,$indlet)
           order by $cit/NAME
           return <LI>{$cit/NAME}</LI>
         }
         </OL>)
    } 
    </BODY>
    </HTML>
    
    
    按字母顺序排列的城市名单
    {
    对于$indcode in(65至70)
    let$indlet:=指向字符串的代码点($indcode)
    返回
    ({$indlet}列表,
    {
    对于doc中的$cit(“mydoc.xml”)/CITIES/ENTITY
    其中以($cit/NAME,$indlet)开头
    按$cit/名称订购
    返回
  • {$cit/NAME}
  • } ) }
    谢谢,你说得对,我做了。但这仍然会留下语法错误。谢谢,你说得对,我做了。但这仍然会留下语法错误。非常感谢。这正是我需要的。谢谢你的详细解释。非常感谢。这正是我需要的。谢谢你的详细解释。