Перейти к содержимому

Фотография

XPath Match - отсекание неизвестного кол-ва параметров в body


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 uhazhor

uhazhor

    Новый участник

  • Members
  • Pip
  • 36 сообщений
  • ФИО:uhazhor

Отправлено 05 декабря 2011 - 07:44

Всем привет!

Собственно с чем я столкнулся...

Что у меня имеется:
1) soapUI бесплатный
2) xml soap-запроса
3) xml soap-ответа
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <cli:getClientProductsResponse xmlns:cli="http://spb.localhost.ru/CMA/ClientProductWS">
         <cli:clientProductsContainer>
            <cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">HMR</cma:systemCode>
            <cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>
            <cma:clientProductsResult xmlns:cma="http://products.localhost.net/CMA">
               <cma:creditLoan>
                  <cma:contractNumber>1</cma:contractNumber>
                  <cma:productName>0-1-0</cma:productName>
		...
               </cma:creditLoan>
               <cma:creditLoan>
                  <cma:contractNumber>2</cma:contractNumber>
                  <cma:productName>0-2-0</cma:productName>
		...
               </cma:creditLoan>
               <cma:creditLoan>
                  <cma:contractNumber>3</cma:contractNumber>
                  <cma:productName>0-3-0</cma:productName>
		...
               </cma:creditLoan>

		...

            </cma:clientProductsResult>
         </cli:clientProductsContainer>
         <cli:clientProductsContainer>
            <cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">TW</cma:systemCode>
            <cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>
            <cma:clientProductsResult xmlns:cma="http://products.localhost.net/CMA"/>
         </cli:clientProductsContainer>
         <cli:clientProductsContainer>
            <cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">SBA</cma:systemCode>
            <cma:isError xmlns:cma="http://spb.localhost.ru/CMA">true</cma:isError>
         </cli:clientProductsContainer>
      </cli:getClientProductsResponse>
   </soapenv:Body>
</soapenv:Envelope>

4) XPath Assertion:
declare namespace cli='http://spb.localhost.ru/CMA/ClientProductWS';
//cli:clientProductsContainer[1]
select from current которого выдает ответ:
         <cli:clientProductsContainer>
            <cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">HMR</cma:systemCode>
            <cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>
            <cma:clientProductsResult xmlns:cma="http://products.localhost.net/CMA">
               <cma:creditLoan>
                  <cma:contractNumber>1</cma:contractNumber>
                  <cma:productName>0-1-0</cma:productName>
		...
               </cma:creditLoan>
               <cma:creditLoan>
                  <cma:contractNumber>2</cma:contractNumber>
                  <cma:productName>0-2-0</cma:productName>
		...
               </cma:creditLoan>
               <cma:creditLoan>
                  <cma:contractNumber>3</cma:contractNumber>
                  <cma:productName>0-3-0</cma:productName>
		...
               </cma:creditLoan>

		...

            </cma:clientProductsResult>
         </cli:clientProductsContainer>

Что нужно:
Сформировать условие анализа soap-ответа только по значениям (так сказать 3 условия):
<cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">HMR</cma:systemCode>
<cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>
<cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">TW</cma:systemCode>
<cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>
<cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">SBA</cma:systemCode>
<cma:isError xmlns:cma="http://spb.localhost.ru/CMA">true</cma:isError>

Какая возникла сложность:
1. Каким либо образом возможно эти 3 условия указать в одном XPath Assertion?
2. Для первого условия заранее неизвестно сколько вернется
<cma:creditLoan>
...
</cma:creditLoan>

Как обрезать условие
<cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">HMR</cma:systemCode>
<cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>
от
<cma:creditLoan>
...
</cma:creditLoan>
???
  • 0

#2 uhazhor

uhazhor

    Новый участник

  • Members
  • Pip
  • 36 сообщений
  • ФИО:uhazhor

Отправлено 06 декабря 2011 - 08:44

знатоки!!! аууу!!! :)
  • 0

#3 tab15

tab15

    Активный участник

  • Members
  • PipPip
  • 128 сообщений

Отправлено 06 декабря 2011 - 11:11

2. типа этого?
declare namespace cli='http://spb.localhost.ru/CMA/ClientProductWS';
declare cma='http://spb.localhost.ru/CMA';
exists(//cli:clientProductsContainer[1]/cma:systemCode[1]) and exists(//cli:clientProductsContainer[1]/cma:isError[1]);

а так я не понял, что нужно проверить :blush:
  • 0

#4 uhazhor

uhazhor

    Новый участник

  • Members
  • Pip
  • 36 сообщений
  • ФИО:uhazhor

Отправлено 06 декабря 2011 - 12:59

2. типа этого?

declare namespace cli='http://spb.localhost.ru/CMA/ClientProductWS';
declare cma='http://spb.localhost.ru/CMA';
exists(//cli:clientProductsContainer[1]/cma:systemCode[1]) and exists(//cli:clientProductsContainer[1]/cma:isError[1]);

а так я не понял, что нужно проверить :blush:


да, примерно правильно, только я пробовал уже это, мне всегда эти условие возвращает "false", например
declare namespace cma='http://products.localhost.net/CMA';
declare namespace cli='http://spb.localhost.ru/CMA/ClientProductWS';
exists(//cli:clientProductsContainer[1]/cma:systemCode[1])


а мне нужно такое условие, которое будет производить проверку только по:
<cli:clientProductsContainer>
            <cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">HMR</cma:systemCode>
            <cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>
а что там после этих строк не важно, потому что не известно сколько там будет строк и какие занчения :)
вот такие дела :)
  • 0

#5 tab15

tab15

    Активный участник

  • Members
  • PipPip
  • 128 сообщений

Отправлено 06 декабря 2011 - 13:30

по моему в начале еще должен быть //cli:getClientProductsResponse, т.е.
declare namespace cli='http://spb.localhost.ru/CMA/ClientProductWS';
declare namespace cma='http://spb.localhost.ru/CMA';
exists( //cli:getClientProductsResponse/cli:clientProductsContainer/cma:systemCode) and exists(//cli:getClientProductsResponse/cli:clientProductsContainer/cma:isError)

  • 0

#6 uhazhor

uhazhor

    Новый участник

  • Members
  • Pip
  • 36 сообщений
  • ФИО:uhazhor

Отправлено 08 декабря 2011 - 06:17

это проверка возвращает значение - true, что не правильно. До сих пор не победил это проблему :)
  • 0

#7 uhazhor

uhazhor

    Новый участник

  • Members
  • Pip
  • 36 сообщений
  • ФИО:uhazhor

Отправлено 21 декабря 2011 - 06:36

У кого нибудь появились какие идеи насчет решения проблемы:

в ответ приходит
<cli:clientProductsContainer>
            <cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">HMR</cma:systemCode>
            <cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>
            <cma:clientProductsResult xmlns:cma="http://products.localhost.net/CMA">
               <cma:creditLoan>
                  <cma:contractNumber>1</cma:contractNumber>
                  <cma:productName>0-1-0</cma:productName>
                ...
а нужно првоерять ответ только по
            <cma:systemCode xmlns:cma="http://spb.localhost.ru/CMA">HMR</cma:systemCode>
            <cma:isError xmlns:cma="http://spb.localhost.ru/CMA">false</cma:isError>

  • 0

#8 almagnit

almagnit

    Новый участник

  • Members
  • Pip
  • 22 сообщений

Отправлено 30 декабря 2011 - 00:23

Мне кажется или так и есть?

Имеются противоречия, в первом посте Вы говорите об отсечении этого "куска xml" - т.е. все кроме него, в последнем о проверке по "нему" - выбираем только эти узлы.

Автор сделайте формальное описание того, что именно Вам нужно проверить, потому что проверка по "кусок xml" не особо информативна.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных