Xquery返回一个xml元素

时间:2016-12-25 21:26:19

标签: xml xquery

我有一个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}
};

但它返回错误“错误发生以匹配所需的序列类型”

有人可以向我解释有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您的函数返回的sequence type的基数与您的结果不符。目前,它总是希望返回一个(并且只有一个)tpinfos元素。如果它返回一个空序列或多个元素,那么与签名不匹配会导致错误。

更改函数声明以允许零到多个tpinfos元素:

declare function local:filtreFormation($f as xs:string) as element(tpinfos)*