Я пытаюсь написать xquery, который имеет внутри цикла for.Ниже мой запрос
<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 или первый «IDNumber» строки, где IDType = WEB. В настоящее время я использую ниже 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>
Ответ от моего 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>
Ожидаемый ответ - простополучить первый идентификатор, нам не нужны другие идентификаторы, как я могу остановиться после получения 1-го идентификатора
<ns2:account>
<acc:persons xmlns:acc="***************">
<acc:person>
<acc:ID>abc</acc:ID>
</acc:person>
</acc:persons>