我有一个XML文件,其开头如下:
<tpinfos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schemaTP.xsd">
<jour id="lundi">
<salle id="A11">
<creneau debut="8:00" fin="10:00">
<formation>M1 Info</formation>
<enseignant>ME Voge</enseignant>
<matiere>ACT</matiere>
</creneau>
<creneau debut="10:00" fin="12:00">
<formation>M1 Miage</formation>
<enseignant>AC Caron </enseignant>
<matiere>ED</matiere>
</creneau>
<creneau debut="12:00" fin="13:30">
<formation>M1 Info</formation>
<enseignant>ME Voge</enseignant>
<matiere>ACT</matiere>
</creneau>
<creneau debut="15:20" fin="17:20">
<formation>M1 Info</formation>
<enseignant>ME Voge</enseignant>
<matiere>ACT</matiere>
</creneau>
</salle>
我应该采取每一个&lt; creneau&gt;这将匹配&lt;形成&gt;使用此函数的参数:
declare function local:filtreFormation($f as xs:string) as element(tpinfos)
我的问题是我应该返回的dataType,“element(tpinfos)”。 由于这种数据类型,我的所有尝试都失败了,我真的没有得到我应该如何做而不会出错。
我的最后一次尝试是:
declare function local:filtreFormation($f as xs:string) as element(tpinfos)
{
for $cr in doc("planningTP.xml")/jour/salle/creneau
where $cr/formation = $f
return element tpinfos {$cr}
};
但它返回错误“错误发生以匹配所需的序列类型”
有人可以向我解释有什么问题吗?
答案 0 :(得分:1)
您的函数返回的sequence type的基数与您的结果不符。目前,它总是希望返回一个(并且只有一个)tpinfos
元素。如果它返回一个空序列或多个元素,那么与签名不匹配会导致错误。
更改函数声明以允许零到多个tpinfos
元素:
declare function local:filtreFormation($f as xs:string) as element(tpinfos)*