【问题标题】:What is the syntax error in this xquery script?这个 xquery 脚本中的语法错误是什么?
【发布时间】:2010-06-21 16:25:04
【问题描述】:

我是 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>

这是我的 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>

我想要它做的是打印出一个简单的 HTML 文档,其中包含这些城市名称的几个列表,由它们以 (A 到 F) 开头的字母分隔。

但是当我尝试在this site 上运行它时,它给了我这个错误:

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

我不知道为什么会这样说。我已经检查过,但我的花括号似乎都正确匹配。任何人都可以看到问题是什么?谢谢。

【问题讨论】:

    标签: xquery


    【解决方案1】:

    这是一个常见的错误。

    您需要在 &lt;H1&gt;&lt;OL&gt; 节点之间放置一个 ,。

    单个节点是一个 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>
    

    【讨论】:

    • 非常感谢。这正是我所需要的。并感谢您的详细解释。
    【解决方案2】:

    您在第 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>
      

    【讨论】:

    • 谢谢,你是对的,我做到了。但这仍然会留下语法错误。
    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多