Arrays 循环和if条件的xquery,应仅返回第一个值

Arrays 循环和if条件的xquery,应仅返回第一个值,arrays,for-loop,if-statement,xslt,xquery,Arrays,For Loop,If Statement,Xslt,Xquery,我正在尝试编写一个xquery,它在for循环中包含if。 以下是我的要求 <PersonIdentifiers> <PIR PersonID="1834040001" IDType="N/A" IDNumber="NA" PrimaryID="true" Version="2" IdentiferFormat=""/> <PIR PersonID="111111111" IDType="WEB" IDNumber="abc" PrimaryID="fals

我正在尝试编写一个xquery,它在for循环中包含if。 以下是我的要求

<PersonIdentifiers> 
<PIR  PersonID="1834040001" IDType="N/A" IDNumber="NA" PrimaryID="true" Version="2" IdentiferFormat=""/> 
<PIR  PersonID="111111111" IDType="WEB" IDNumber="abc" PrimaryID="false" Version="3" IdentiferFormat=""/> 
<PIR  PersonID="222222222" IDType="N/A" IDNumber="xyz" PrimaryID="false" Version="4" IdentiferFormat=""/> 
<PIR  PersonID="333333333" IDType="WEB" IDNumber="aaaaaa" PrimaryID="false" Version="5" IdentiferFormat=""/> 
 <PIR  PersonID="444444444" IDType="WEB" IDNumber="aaaaaa" PrimaryID="false" Version="6" IdentiferFormat=""/> 
</PersonIdentifiers> 

我在响应中需要的只是1或IDType=WEB所在行的第一个“IDNumber” 我目前正在使用下面的xquery,它让for循环遍历数组,并在IDType=WEB时返回我的值。但我不会在第一次成功价值之后停止。 我怎样才能做到这一点

我当前的xquery:

        <ns2:account>

        <acc:persons>
            <acc:person>
                <acc:personID>{fn:data($PersonMaintenanceResponse/ns1:PersonIdentifiers/ns1:PIR/@IDType)}</acc:personID>
                {
                for $PIR at $position in $PersonMaintenanceResponse//ns1:PersonIdentifiers/ns1:PIR
                return
                if($PersonMaintenanceResponse//ns1:PersonIdentifiers/ns1:PIR[$position]/@IDType='WEB')
                then
                    if ($PersonMaintenanceResponse/ns1:PersonIdentifiers/ns1:PIR[$position]/@IDNumber)
                    then <acc:ID>{fn:data($PersonMaintenanceResponse/ns1:PersonIdentifiers/ns1:PIR[$position]/@IDNumber)}</acc:ID>
                    else ()
                else
                ()
                }

            </acc:person>
        </acc:persons>
    </ns2:account>

{fn:data($PersonMaintenanceResponse/ns1:PersonIdentifiers/ns1:PIR/@IDType)}
{
对于$PersonMaintenance响应中处于$position的$PIR//ns1:PersonIdentifiers/ns1:PIR
返回
if($personMaintenance响应//ns1:PersonIdentifiers/ns1:PIR[$position]/@IDType='WEB'))
然后
if($PersonMaintenance Response/ns1:PersonIdentifiers/ns1:PIR[$position]/@IDNumber)
然后{fn:data($PersonMaintenanceResponse/ns1:PersonIdentifiers/ns1:PIR[$position]/@IDNumber)}
else()
其他的
()
}
来自我的xquery的响应

  <ns2:account>
<acc:persons xmlns:acc="***************">
  <acc:person>

    <acc:ID>abc</acc:ID>
    <acc:ID>aaaaaa</acc:ID>
    <acc:ID>aaaaaa</acc:ID>

  </acc:person>
</acc:persons>

abc
AAAAA
AAAAA

预期的响应是,仅获取第一个ID,我们不需要Other ID,在获取第一个ID后如何停止

  <ns2:account>
<acc:persons xmlns:acc="***************">
  <acc:person>
     <acc:ID>abc</acc:ID>
  </acc:person>
</acc:persons>

abc

使用谓词作为筛选器,并索引位置以获取第一个谓词

for $n in PersonIdentifiers/PIR[@IDType ="WEB"][1]
return
   data($n/@IDNumber)
返回
abc

见:

或者作为XPATH 1-liner

<account>
  <persons>
    <person>
        <ID>{data(PersonIdentifiers/PIR[@IDType ="WEB"][1]/@IDNumber)}</ID>
    </person>
  </persons>
</account>  

{data(PersonIdentifiers/PIR[@IDType=“WEB”][1]/@IDNumber)}