XMLLibrary: неправильная сортировка данных в ответном сообщении soap


(kom) #1

Xml:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header><ns0:RequestNumber xmlns:ns0="http://nvgua.com/dpi/spr/ws/ad">2</ns0:RequestNumber></S:Header><S:Body><ns0:RequestedDataResponse xmlns:ns0="http://nvgua.com/dpi/spr/ws/ad"><ResponseData><ns0:Subscriber><TerminalID>34687602</TerminalID><AttributeCode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></ns0:Subscriber><ns0:Services xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><ns0:Counters><ns0:Counter><CounterServiceCode>FRCDBZL</CounterServiceCode><CounterCode>CDMATimeSlicer</CounterCode><CounterDesc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><CounterType>TOTAL_DURATION</CounterType><UnitsOfMeasure>SECONDS</UnitsOfMeasure><CounterStartTime>2013-12-05T10:59:25.286+02:00</CounterStartTime><CounterPeriod xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><CounterEndTime>9999-12-31T00:00:00+02:00</CounterEndTime><InputUsage>0</InputUsage><OutputUsage>0</OutputUsage><TotalUsage>34675</TotalUsage></ns0:Counter><ns0:Counter><CounterServiceCode>FRCDBZL</CounterServiceCode><CounterCode>CDMATimeSlicer7</CounterCode><CounterDesc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><CounterType>TOTAL_DURATION</CounterType><UnitsOfMeasure>EVENTS</UnitsOfMeasure><CounterStartTime>2014-05-28T11:23:43+03:00</CounterStartTime><CounterPeriod xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><CounterEndTime>2099-01-01T00:00:00+02:00</CounterEndTime><InputUsage>0</InputUsage><OutputUsage>0</OutputUsage><TotalUsage>10</TotalUsage></ns0:Counter><ns0:Counter><CounterServiceCode>FRCDBZL</CounterServiceCode><CounterCode>CDMATimeSlicer7</CounterCode><CounterDesc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><CounterType>TOTAL_DURATION</CounterType><UnitsOfMeasure>EVENTS</UnitsOfMeasure><CounterStartTime>2014-05-28T11:06:02+03:00</CounterStartTime><CounterPeriod xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><CounterEndTime>9999-12-31T00:00:00+02:00</CounterEndTime><InputUsage>0</InputUsage><OutputUsage>0</OutputUsage><TotalUsage>10</TotalUsage></ns0:Counter></ns0:Counters><ns0:Sessions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><ns0:TmAttributes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></ResponseData></ns0:RequestedDataResponse></S:Body></S:Envelope>,

Если вызываю подряд, по порядку:
${servicecoadsoap1} Get Element Text ${root} .//Counter[0]/CounterCode
${servicecoadsoap2} Get Element Text ${root} .//Counter[1]/CounterCode
${servicecoadsoap3} Get Element Text ${root} .//Counter[2]/CounterCode
то получаю
${servicecoadsoap1} = CDMATimeSlicer7
${servicecoadsoap2} = CDMATimeSlicer
${servicecoadsoap3} = CDMATimeSlicer7

Почему так? Ведь по xml видно что сначала должен быть CDMATimeSlicer, а потом уже CDMATimeSlicer7
Если открываю этот xml в soapui, то тоже такой порядок: CDMATimeSlicer, CDMATimeSlicer7, робот как-то по своему сортирует?


(kom) #2

Получается такая странная сортировка, проверил еще на паре подобных xml:
1 - это первый элемент
0- самый последний
а 2, 3 и т.д. - идут в соответствующем порядке, по возрастанию


(kom) #3

Нашел решение:
@{texts} = Get Elements Texts ${root} .//Counter/CounterCode
возвращает текст сразу всех элементов в массив @{texts}
причем в этом случае порядок - правильный.
${servicecoadsoap1} Set Variable @{texts}[0]
${servicecoadsoap2} Set Variable @{texts}[1]
${servicecoadsoap3} Set Variable @{texts}[2]
${servicecoadsoap4} Set Variable @{texts}[3]
${servicecoadsoap5} Set Variable @{texts}[4]


(vmaximv) #4

Баг в либе + некорректный xpath: //*[0] == //*[position() =0]
== всегда ложь, так как позиция есть натуральное число от 1 до N.