For loop 用于检查if条件中两个属性值的xslt/xquery
我被困在xquery中的某个位置。在响应中,我希望返回每种类型的电话号码,即HOME和CELL,但仅返回序列号最高的电话号码。如果有两行带有PhoneType=“HOME”,我希望返回序列号最高的电话,即在我的情况下为sequence=“3” 通过我的xquery,我可以返回一个phoneType=“HOME”和第一行HOME。我无法添加条件来检查序列。在哪里以及如何添加它。请建议。提前谢谢 我的Xquery的一部分:For loop 用于检查if条件中两个属性值的xslt/xquery,for-loop,if-statement,xslt-1.0,xquery,For Loop,If Statement,Xslt 1.0,Xquery,我被困在xquery中的某个位置。在响应中,我希望返回每种类型的电话号码,即HOME和CELL,但仅返回序列号最高的电话号码。如果有两行带有PhoneType=“HOME”,我希望返回序列号最高的电话,即在我的情况下为sequence=“3” 通过我的xquery,我可以返回一个phoneType=“HOME”和第一行HOME。我无法添加条件来检查序列。在哪里以及如何添加它。请建议。提前谢谢 我的Xquery的一部分: <acc:phones> {
<acc:phones>
{
for $PersonPhonesRow in $PersonMaintenanceResponse/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow[@PhoneType="HOME"][1]
return
if(fn:data($PersonMaintenanceResponse/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow/@PhoneType="HOME"[1]))
then
<com:phone>
<com:type>{'HOME'}</com:type>
<com:phoneNumber>{fn:data($PersonMaintenanceResponse/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow[@PhoneType="HOME"][1]/@PhoneNumber)}</com:phoneNumber>
<com:carrier>{fn:data($PersonMaintenanceResponse/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow[@PhoneType="HOME"][1]/@Extension)}</com:carrier>
</com:phone>
else
()
}
</acc:phones>
{
对于$PersonPhonesRow,在$PersonMaintenance响应中/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow[@PhoneType=“HOME”][1]
返回
if(fn:data($PersonMaintenance Response/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow/@PhoneType=“HOME”[1]))
然后
{'HOME'}
{fn:data($PersonMaintenance Response/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow[@PhoneType=“HOME”][1]/@PhoneNumber)}
{fn:data($PersonMaintenanceResponse/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow[@PhoneType=“HOME”][1]/@Extension)}
其他的
()
}
请求:
<CMPerson xmlns="http://splwg.com/CMPerson.xsd">
<CMPersonService>
<CMPersonDetails>
<PersonPhones>
<PersonPhonesHeader PersonID="1234567890" LastSequenceNumber="9"/>
<PersonPhonesRow PersonID="1234567890" Sequence="1" PhoneType="HOME" IntlPrefix="" PhoneNumber="(850) 123-0000" Extension="" Version="12" PhoneAlgorithmParamValue="(999) 999-9999"/>
<PersonPhonesRow PersonID="1234567890" Sequence="2" PhoneType="CELL" IntlPrefix="" PhoneNumber="(850) 000-0000" Extension="" Version="3" PhoneAlgorithmParamValue="(999) 999-9999"/>
<PersonPhonesRow PersonID="1234567890" Sequence="3" PhoneType="HOME" IntlPrefix="" PhoneNumber="(850) 123-1111" Extension="ATT" Version="1" PhoneAlgorithmParamValue="(999) 999-9999"/>
<PersonPhonesRow PersonID="1234567890" Sequence="4" PhoneType="BUSN" IntlPrefix="" PhoneNumber="(904) 111-1111" Extension="" Version="3" PhoneAlgorithmParamValue="(999) 999-9999"/>
</PersonPhones>
</CMPersonDetails>
</CMPersonService>
</CMPerson>
所需答复:
<acc:phones>
<com:phone xmlns:com="******">
<com:type>HOME</com:type>
<com:phoneNumber>(850) 123-1111</com:phoneNumber>
<com:carrier>ATT</com:carrier>
</com:phone>
<com:phone xmlns:com="******">
<com:type>CELL</com:type>
<com:phoneNumber>(904) 111-1111</com:phoneNumber>
<com:carrier></com:carrier>
</com:phone>
</acc:phones>
家
(850) 123-1111
ATT
细胞
(904) 111-1111
要使用的查询:
let $PersonMaintenanceResponse := 'Your request'
let $uniqPhoneType :=distinct-values($PersonMaintenanceResponse/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow/@PhoneType)
for $each at $i in $uniqPhoneType
return
<acc:phones>
{
let $seq := $PersonMaintenanceResponse/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow[(@PhoneType = $each)]
let $maxValue := max($seq/@Sequence)
let $maxrow := $seq[@Sequence eq $maxValue]
return
<com:phone xmlns:com="*******">
<com:type>{$each}</com:type>
<com:phoneNumber>{$maxrow/@PhoneNumber}</com:phoneNumber>
<com:carrier>{$maxrow/@Extension}</com:carrier>
</com:phone>
}</acc:phones>
让$PersonMaintenance响应:=“您的请求”
let$uniqPhoneType:=不同的值($PersonMaintenance响应/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhonesRow/@PhoneType)
$uniqPhoneType中的$i中的每个$
返回
{
让$seq:=$PersonMaintenance响应/ns2:CMPersonService/ns2:CMPersonDetails/ns2:PersonPhones/ns2:PersonPhonesRow[(@PhoneType=$each)]
设$maxValue:=max($seq/@Sequence)
让$maxrow:=$seq[@Sequence eq$maxValue]
返回
{每个$}
{$maxrow/@PhoneNumber}
{$maxrow/@Extension}
}
谢谢你。“我会试试这个。”西姆兰,若答案符合你们的要求,请打“ok”