我是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上运行时,它会给我这个错误:
查询:&lt;&gt;,第9行,第6列:[XPST0003]语法错误,意外“'{'”,期待“'}'”
我不知道为什么会这么说。我检查过并检查过,但我的花括号看起来都很合适。任何人都可以看到问题是什么?感谢。
答案 0 :(得分:3)
这是一个常见的错误。
您需要在<H1>
和<OL>
节点之间放置一个。
单个节点是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>
答案 1 :(得分:1)
你忘记了&lt; OL&gt;在{第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>