Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Знатокам System.Xml

256
20 августа 2010 года
foxweb
1.0K / / 27.07.2005
Всем привет.
Я не слишком знаком с тонкостями XML, поэтому вопрос будет чайниковый.

Дано: Java SOAP-сервер, принимающий принимающий XML-запросы и отдающий XML-ответы. У меня примеров запросов этих куча, но на все сервер отвечает примерно такое:

 
Код:
System.Xml.XmlException: The root element is missing.
   at System.Xml.XmlTextReader.Read()
   at System.Xml.XmlValidatingReader.ReadWithCollectTextToken()
   at System.Xml.XmlValidatingReader.Read()
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.LoadXml(String xml)
   at ReservationBuilderClient.Controls.BookTrip.btnSubmitBookTripFromProfileTab_Click(Object sender, EventArgs e)


Пример XML:
[HTML]
<CruiseShopRequest xmlns="http://www.galileo.com/tds/serviceexchange/CruiseShopService" xmlns:cruise="http://www.galileo.com/tds/bdm/cruise/Cruise" xmlns:cruiseshop="http://www.galileo.com/tds/serviceexchange/CruiseShopService/CruiseShopCommon" xmlns:soaq="http://www.galileo.com/tds/serviceexchange/SOARequest" xmlns:soar="http://www.galileo.com/tds/serviceexchange/SOAResponse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" bdmVersion="1.0">
<ShoppingRequest>
<cruiseshop:RequestDetails>
<cruise:AgencyInfo Pseudo="GK5" AgentID="26142A" AgentName="JJones" />
<cruise:accessProfile>STP_CRUISE_18D9_CAP</cruise:accessProfile>
</cruiseshop:RequestDetails>
<cruiseshop:ProductAvailabilityReq>
<cruise:CruisePackageReq Vendor="RCC" Destination="ALX" Ship="RCCAD" StartDt="2006-06-17" Duration="7" Currency="USD">
<cruise:PackageDetailReq SailFlag="true" />
</cruise:CruisePackageReq>
<cruise:PassengerInfo PassengerID="1" BirthDt="1981-03-22" Gender="M" DepartureCity="DEN" TransType="O" ResidencyCity="DEN" ResidencyState="CO" ResidencyZip="80112" />
<cruise:PassengerInfo PassengerID="2" BirthDt="1982-03-22" Gender="F" DepartureCity="DEN" TransType="O" ResidencyCity="DEN" ResidencyState="CO" ResidencyZip="80112" />
</cruiseshop:ProductAvailabilityReq>
</ShoppingRequest>
</CruiseShopRequest>
[/HTML]

Вопрос: ЧЯДНТ и как добиться нормального парсинга?

P.S. - Никогда с Java дела не имел, сервер не мой. Мои только запросы.
1
20 августа 2010 года
kot_
7.3K / / 20.01.2000
во первых у тебя есть отсылка к схеме. Во вторых - в чем состоит задача - сервер тебе говорит о том, что в твоем запросе отсутсвует корневой узел - т.е. нет во первых <?xml ...> и все остальные узлы соотвественно он распознать не может.
256
21 августа 2010 года
foxweb
1.0K / / 27.07.2005
Ок, так я и думал.
Просто хотелось узнать, как "думает" System.Xml.*

В понедельник попробуем :)
14
23 августа 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: foxweb

Просто хотелось узнать, как "думает" .*


По идее System.Xml мало похоже на Java и много похоже на .NET
Ну и, соответственно, отсылаться к MSXML

256
23 августа 2010 года
foxweb
1.0K / / 27.07.2005
Ок, я тут всё разрулил. Оказывается мой перловый скрипт оборачивает приведённый XML примерно до такого вида:

Было:

[HTML]
<AirAvailability_6_2>
<AirAvailMods>
<GenAvail>
<NumSeats>1</NumSeats>
<Class><![CDATA[ ]]></Class>
<StartDt>20101015</StartDt>
<StartPt>DEN</StartPt>
<EndPt>ORD</EndPt>
<StartTm>1200</StartTm>
<TmWndInd>D</TmWndInd>
<StartTmWnd>0800</StartTmWnd>
<EndTmWnd>1400</EndTmWnd>
<FltTypeInd></FltTypeInd>
<StartPtInd></StartPtInd>
<EndPtInd></EndPtInd>
<IgnoreTSPref></IgnoreTSPref>
</GenAvail>
</AirAvailMods>
</AirAvailability_6_2>
[/HTML]

Стало:

[HTML]
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><SubmitXml xmlns="http://webservices.galileo.com/"><Profile xsi:type="xsd:string">DynGalileoCopy_HAP9</Profile><Request><AirAvailability_6_2>
<AirAvailMods>
<GenAvail>
<NumSeats>1</NumSeats>
<Class><![CDATA[ ]]></Class>
<StartDt>20101015</StartDt>
<StartPt>DEN</StartPt>
<EndPt>ORD</EndPt>
<StartTm>1200</StartTm>
<TmWndInd>D</TmWndInd>
<StartTmWnd>0800</StartTmWnd>
<EndTmWnd>1400</EndTmWnd>
<FltTypeInd></FltTypeInd>
<StartPtInd></StartPtInd>
<EndPtInd></EndPtInd>
<IgnoreTSPref></IgnoreTSPref>
</GenAvail>
</AirAvailMods>
</AirAvailability_6_2>
</Request><Filter><AirAvailability_6_2><AirAvail><AvailFlt><_/></AvailFlt></AirAvail></AirAvailability_6_2></Filter></SubmitXml></soap:Body></soap:Envelope>
[/HTML]

Это делает, например, перловый модуль SOAP::Lite.
Я же пытался запостить "очищенный" XML без заголовков.

Спасибо. Можно закрывать.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог