Return XQuery FLWOR 序列中只有一个元素

Return only one element from XQuery FLWOR sequence

我正在使用 XQuery 根据某些条件 select 来自 XML 的节点列表。结果是几个节点的列表,但我只想 return 其中一个(第一个或最后一个)。

首先我使用 XPath 来 select 一些元素,然后我想过滤掉任何不包含值(即为空)的元素。为此,我正在使用 functx:if-not-empty 函数。我得到的是一系列项目,我只需要其中一个。到目前为止,这是我的代码:

declare function xf:createHeader($var as element(sgi:inputType))
    {
        <ns0:Header>
            <ns0:MSG_TYPE>MESSAGETYPE</ns0:MSG_TYPE>
            <ns0:MSG_NAMESPACE>{ fn:namespace-uri($var) }</ns0:MSG_NAMESPACE>            
            <ns0:UNIT>
            {   
                let $x := $var/DataArea/OrganisationalUnit[@type = "Responsible"]/PartnerID[@agencyID = "TT4"]
                for $y in $x 
                    where functx:if-not-empty($y)
                    return data($y)
            }
            </ns0:UNIT>           
        </ns0:Header>
};

您要查找的是谓词。您可以将 for 语句包装在谓词中,并用 [1] 请求第一个或用 [fn:last()]

请求最后一个

所以它看起来像

    <ns0:UNIT>
    {   
        let $x := $var/DataArea/OrganisationalUnit[@type = "Responsible"]/PartnerID[@agencyID = "TT4"]
        return
        (
            for $y in $x 
            where functx:if-not-empty($y)
            return data($y)
        )[fn:position() = (1,fn:last())]
    }
    </ns0:UNIT>