2015-03-25 25 views
1

我使用XQuery根據某些條件從XML中選擇節點列表。結果是幾個節點的列表,但我只想返回其中的一個(第一個或最後一個)。僅從XQuery FLWOR序列返回一個元素

首先我使用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> 
}; 

回答

1

你在找什麼是一個謂詞。你可以用for語句中的謂詞,並要求先用[1]或最後加上[FN:最後一個()]

所以它看起來像

<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> 
+1

事實上,你可以做掉與整個'for'和只是'返回數據($ x [functx:if-not-empty(。)] [1])' – 2015-03-25 13:05:42