2015-06-18 4 views
1

Эти два файла xml означают одно и то же?Зачем эти XML-файлы получают разные ответы?

Первый файл:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" > 
    <S:Body> 
     <ProcessData xmlns="http://arinc/asd/OnvoyRegistration"> 
     <document><request xmlns="http://arinc/asd/OnvoyRegistration"> 
     <hotelChain>Disney</hotelChain> 
     <processType>ModifyGuest</processType> 
     <hotelLineId>ASMU03042015</hotelLineId> 
     <firstName>NICOLE</firstName> 
     <lastName>ROLAIN</lastName> 
     <numberOfBags>1</numberOfBags> 
     <status>enrolled</status> 
     <hotelGuestId>41955886</hotelGuestId> 
     <room>5613</room> 
     <eligible>1</eligible> 
     <partyGroupId>0</partyGroupId> 
     <arrivalDate>2015-02-26</arrivalDate> 
     <departureDate>2015-03-04</departureDate> 
     <segments> 
      <segment> 
       <carrier>WN</carrier> 
       <flightNumber>4280</flightNumber> 
       <departureCity>MCO</departureCity> 
       <departureDate>2015-03-04</departureDate> 
       <departureTime>12:00 PM</departureTime> 
       <operation>Add</operation> 
      </segment> 
     </segments> 
    </request> 
    </document> 
     </ProcessData> 
    </S:Body> 
</S:Envelope> 

Ответ:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> 
     <ProcessDataResponse xmlns="http://arinc/asd/OnvoyRegistration"> 
     <ProcessDataResult> 
      <response xmlns="">Invalid Process Type</response> 
     </ProcessDataResult> 
     </ProcessDataResponse> </soap:Body> </soap:Envelope> 

Второй файл:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:onv="http://arinc/asd/OnvoyRegistration"> 
    <S:Body> 
     <onv:ProcessData> 
     <onv:document><request> 
     <hotelChain>Disney</hotelChain> 
     <processType>ModifyGuest</processType> 
     <hotelLineId>ASMU03042015</hotelLineId> 
     <firstName>NICOLE</firstName> 
     <lastName>ROLAIN</lastName> 
     <numberOfBags>1</numberOfBags> 
     <status>enrolled</status> 
     <hotelGuestId>41955886</hotelGuestId> 
     <room>5613</room> 
     <eligible>1</eligible> 
     <partyGroupId>0</partyGroupId> 
     <arrivalDate>2015-02-26</arrivalDate> 
     <departureDate>2015-03-04</departureDate> 
     <segments> 
      <segment> 
       <carrier>WN</carrier> 
       <flightNumber>4280</flightNumber> 
       <departureCity>MCO</departureCity> 
       <departureDate>2015-03-04</departureDate> 
       <departureTime>12:00 PM</departureTime> 
       <operation>Add</operation> 
      </segment> 
     </segments> 
    </request> 
    </onv:document> 
     </onv:ProcessData> 
    </S:Body> 
</S:Envelope> 

Ответ:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <ProcessDataResponse xmlns="http://arinc/asd/OnvoyRegistration"> 
     <ProcessDataResult> 
      <response xmlns="">OK</response> 
     </ProcessDataResult> 
     </ProcessDataResponse> 
    </soap:Body> 
</soap:Envelope> 

Я думал, что оба эти XML-файла представляют одну и ту же информацию. Но когда я попал в веб-службу SOAP, используя эти два файла, я получаю другой ответ.

Я также попытался это:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:onv="http://arinc/asd/OnvoyRegistration"> 
    <S:Body> 
     <onv:ProcessData> 
     <onv:document><onv:request> 
     <onv:hotelChain>Disney</onv:hotelChain> 
     <onv:processType>ModifyGuest</onv:processType> 
     <onv:hotelLineId>ASMU03042015</onv:hotelLineId> 
     <onv:firstName>NICOLE</onv:firstName> 
     <onv:lastName>ROLAIN</onv:lastName> 
     <onv:numberOfBags>1</onv:numberOfBags> 
     <onv:status>enrolled</onv:status> 
     <onv:hotelGuestId>41955886</onv:hotelGuestId> 
     <onv:room>5613</onv:room> 
     <onv:eligible>1</onv:eligible> 
     <onv:partyGroupId>0</onv:partyGroupId> 
     <onv:arrivalDate>2015-02-26</onv:arrivalDate> 
     <onv:departureDate>2015-03-04</onv:departureDate> 
     <onv:segments> 
      <onv:segment> 
       <onv:carrier>WN</onv:carrier> 
       <onv:flightNumber>4280</onv:flightNumber> 
       <onv:departureCity>MCO</onv:departureCity> 
       <onv:departureDate>2015-03-04</onv:departureDate> 
       <onv:departureTime>12:00 PM</onv:departureTime> 
       <onv:operation>Add</onv:operation> 
      </onv:segment> 
     </onv:segments> 
    </onv:request> 
    </onv:document> 
     </onv:ProcessData> 
    </S:Body> 
</S:Envelope> 

Ответ:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <ProcessDataResponse xmlns="http://arinc/asd/OnvoyRegistration"> 
     <ProcessDataResult> 
      <response xmlns="">Invalid Process Type</response> 
     </ProcessDataResult> 
     </ProcessDataResponse> 
    </soap:Body> 
</soap:Envelope> 
+0

Похоже, вы сбиты с толку. Вы сказали, что теперь вы получаете еще одну ошибку (еще одну, чем раньше), но они все одинаковы. Я не занимаю больше времени здесь. – Seelenvirtuose

+0

Да, я понял. Благодарю. –

ответ

1

Нет, они не являются одинаковыми.

Объявление пространства имен без префикса объявляет так называемое пространство имен по умолчанию. Пространство имен по умолчанию применяется к элементу, где он объявлен, и ко всем дочерним элементам.

Таким образом, в следующем фрагменте XML

<parent xmlns="namespace"> 
    <child /> 
</parent> 

как - родительский элемент и дочерний элемент в данном пространстве имен.

С другой стороны, в следующем фрагменте XML

<pre:parent xmlns:pre="namespace"> 
    <child /> 
</pre:parent> 

у вас есть пространство имен, объявленные с префиксом. Это пространство имен применяется только к тем элементам, которые явно переносят этот префикс. В этом примере это только элемент parent, тогда как элемент child не имеет пространства имен.


В ваших XML-документов, которые имеют аналогичную ситуацию:

<ProcessData xmlns="http://arinc/asd/OnvoyRegistration"> 
    <document> 
     <request xmlns="http://arinc/asd/OnvoyRegistration"> 
      ... 
     </request> 
    </document> 
</ProcessData> 

против

<onv:ProcessData> 
    <onv:document> 
     <request> 
      ... 
     </request> 
    </onv:document> 
</onv:ProcessData> 

с префиксом onv, представляющий то же пространство имен, как описано выше.

Во втором документе элемент request не имеет пространства имен из-за недостающего префикса. В первом документе он находится в пространстве имен по умолчанию, объявленном несколько выше в иерархии. Фактически декларация пространства имен в элементе request является избыточной (в первом документе).

+0

Следуя вашему объяснению, я добавил onv: с каждым дочерним элементом. Но теперь я получаю некоторую другую ошибку, а не ошибку, которую я получал в первой. –

+0

Если это так, вам следует подумать о том, чтобы обновить свой вопрос тем, что вы сделали, и какой ошибкой вы получите. – Seelenvirtuose

+0

Я обновил вопрос с тем, что предложил U и с ответами. –

Смежные вопросы