xml - 仅返回XQuery FLWOR序列中的一个元素

标签 xml xpath xquery

我正在使用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>
};

最佳答案

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

关于xml - 仅返回XQuery FLWOR序列中的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29253935/

相关文章:

xml - 使用 xslt 转换多个 xml 模式文档

java - Marklogic 6 , java调用资源扩展

ruby - 使用 Nokogiri 解析 XML 文件以确定路径 (Ruby)

java xpath 文本

jquery - 在 xquery 文件中应用 &lt;!DOCTYPE html>

xml - 我有2个xquery代码,其中1个给出正确的结果,而2个没有。为什么?

javascript - JQGrid 数据未使用 xml 加载

java - 在 Camel 中针对 XSD 验证订单

php - 将 XML 导入 MySQL 数据库

java - 生成Google搜索引擎的XPath表达式