Arrays 循环和if条件的xquery,应仅返回第一个值
我正在尝试编写一个xquery,它在for循环中包含if。 以下是我的要求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
<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)}