【问题标题】:Return only one element from XQuery FLWOR sequence从 XQuery FLWOR 序列中只返回一个元素
【发布时间】:2015-03-25 11:06:50
【问题描述】:

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

首先我使用 XPath 选择一些元素,然后我想过滤掉任何不包含值(即为空)的元素。为此,我正在使用 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>
};

【问题讨论】:

    标签: xml xpath xquery


    【解决方案1】:

    您正在寻找的是一个谓词。您可以将 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>
    

    【讨论】:

    • 事实上你可以去掉整个for而只去掉return data($x[functx:if-not-empty(.)][1])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多