此 xquery 脚本中的语法错误是什么? [英] What is the syntax error in this xquery script?
问题描述
我是 XQuery 的初学者,正在尝试做一些简单的练习来学习它.但是我试图组合的这个最新查询拒绝运行,给我一个语法错误.
I'm a beginner to XQuery, trying to do some simple exercises to learn it. But this latest query I'm trying to put together refuses to run, giving me a syntax error.
这是我的 XQuery:
This is my 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 的一个子集:
And this is a subset of my XML file 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)分隔.
What I want it to do is print out a simple HTML document with several lists of these city names, broken out by the letter they start with (A to F).
但是当我尝试在 这个网站 上运行这个时,它给了我这个错误:
But when I try running this out on this site, it gives me this error:
查询:<>,第 9 行,第 6 列:[XPST0003] 语法错误,意外的'{'",需要'}'"
我不知道为什么这么说.我已经检查并检查过,但我的花括号似乎都正确匹配.任何人都可以看到问题是什么?谢谢.
I have no idea why it says that. I've checked and checked, but my curly braces all seem properly matched. Can anyone see what the problem is? Thanks.
推荐答案
这是一个常见的错误.
您需要在 和
节点之间放置 , .
You need to place a , between the <H1>
and <OL>
nodes.
单个节点是一个 XQuery 表达式(就像直接元素构造函数中的多个节点一样).返回表达式必须是表达式.在这种情况下,您要返回两个节点.每个节点都是一个项目,因此为了返回它们,您需要按顺序连接两个节点.
A single node is an XQuery expression (as are multiple nodes inside a direct element constructor). The return expression must be an expression. In this case you want to return two nodes. Each node is a single item and so in order to return them both you need to concatenate the two nodes in a sequence.
查询将如下所示:
<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>
这篇关于此 xquery 脚本中的语法错误是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!