xQuery:总是相同的错误:括号未闭合

  • 本文关键字:错误 xQuery xml xquery basex
  • 更新时间 :
  • 英文 :


我想使用xQuery将这个XML文档(factbook.XML(转换为HTML
但是代码(可以在下面的XML中找到(不起作用。

我总是得到相同的错误:(我使用BaseX 9.4.2(

错误:
在C:\Program Files(x86(/BaseX/etc/file2,9/6:停止:
[XPST0003]应为"}",找到"{"。

我不明白为什么我总是得到同样的错误,所有的括号都是封闭的。

这是我的XML文件:(部分(

<mondial>
<continent id="f0_119" name="Europe"/>
<continent id="f0_123" name="Asia"/>
...
<country id="f0_136" name="Albania"
capital="f0_1461" population="3249136" total_area="28750">
<city id="f0_1461" country="f0_136">
<name>Tirane</name>
<population>192000</population>
</city>
...
<encompassed continent="f0_119" percentage="100"/>
</country>
<country id="f0_149" name="Austria"
capital="f0_1467" population="8023244" total_area="83850">
<province id="f0_17448" name="Upper Austria"
capital="f0_2267" population="1373000">
<city id="f0_2267">
<name>Linz</name>
<population>203000</population>
</city>
</province>
<province id="f0_17447" name="Vienna"
capital="f0_1467" population="1583000">
<city id="f0_1467">
<name>Vienna</name>
<population>1583000</population>
</city>
</province>
...
<encompassed continent="f0_119" percentage="100"/>
</country>
...
<country id="f0_670" name="Turkey"
capital="f0_1797" population="62484480" total_area="780580">
<province id="f0_19040" name="Ankara"
capital="f0_1797" population="3236626">
<city id="f0_1797">
<name>Ankara</name>
<population>2782200</population>
</city>
</province>
...
<encompassed continent="f0_119" percentage="32"/>
<encompassed continent="f0_123" percentage="68"/>
</country>
</mondial>

这是我的xQuery代码:

let $db := /mondial
let $html := 
<html>
<body>
{
for $cont in $db/continent
order by $cont/@name
return <h1>""{$cont/@name}</h1> 
{
for $coun in $db/country
order by $coun/@name
where $cont/@id = $count//encompassed/@continent
return <p>
<h2>{coun/@name}</h2>
<b>Capital:</b>
{
for $cap in $coun//city 
where $coun/@capital = $cap/@id
return $cap/name
}
<b>Total Area "in" {$cont/@name}:</b>
{
for $area in $coun//encompassed[@continent = $cont/@id]/percentage
return data($coun/@total_area) * ($area div 100)
}    
</p>
}
} </body> </html>
return $html

提前感谢的帮助

Saxon报告了相同的错误:

Analyzing query from test.xq
Static error near {.../@name}</h1> { for} on line 8 at column 6 of file:/***/test.xq 
XPST0003  expected "}", found "{"
Static error(s) in query

我不得不承认,这并不是很明显。但问题是;{quot;紧跟在return <h1>""{$cont/@name}</h1>后面。我认为(从缩进判断(你可能希望这个块成为return子句的一部分,在这种情况下,它需要是

let $db := /mondial
let $html := 
<html>
<body>
{
for $cont in $db/continent
order by $cont/@name
return (<h1>""{$cont/@name}</h1>, 
for $coun in $db/country
order by $coun/@name
where $cont/@id = $count//encompassed/@continent
return <p>
<h2>{coun/@name}</h2>
<b>Capital:</b>
{
for $cap in $coun//city 
where $coun/@capital = $cap/@id
return $cap/name
}
<b>Total Area "in" {$cont/@name}:</b>
{
for $area in $coun//encompassed[@continent = $cont/@id]/percentage
return data($coun/@total_area) * ($area div 100)
}    
</p>
)
} </body> </html>
return $html

然后,我得到一个未解析的变量$count引用的错误,但我认为这是一个打字错误。

这里有两个常见错误:

  • 元素构造函数(如<x/>(是有效的XQuery表达式,但元素构造函数序列(如<x/><y/>(不是:它需要逗号(<x/>,<y/>(
  • 如果将包含逗号运算符的表达式放在return之后,则需要在其周围加括号

另一个错误不太常见:构造"{" expr "}"不是有效的表达式。大括号只能在非常特定的地方使用,没有通用的大括号分隔的块表达式可以在任何地方使用。

最新更新