[英]Return only one element from XQuery FLWOR sequence
I'm using XQuery to select a list of nodes from an XML according to some conditions. 我正在使用XQuery根据某些条件从XML中选择节点列表。 The result is a list of a couple of nodes, but I only want to return one (first or last) of them.
结果是几个节点的列表,但是我只想返回其中一个(第一个或最后一个)。
First I use XPath to select some elements, then I want to filter out any element that does not contain a value (ie. is empty). 首先,我使用XPath选择一些元素,然后想过滤掉任何不包含值(即为空)的元素。 For that I am using the functx:if-not-empty function.
为此,我正在使用functx:if-not-empty函数。 What I get is a sequence of items and I only need one of them.
我得到的是一系列物品,我只需要其中一个。 This is my code so far:
到目前为止,这是我的代码:
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>
};
What you are looking for is a predicate. 您正在寻找的是谓词。 You can wrap the for statement in a predicate and ask for the first with [1] or the last with [fn:last()]
您可以将for语句包装在谓词中,并用[1]要求第一个,或用[fn:last()]要求最后一个
so it would look like 所以看起来像
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.