Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2015, 18:12   #1
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию Как узнать сушествование в Soap-ответе xml тега?

Soap-сервер возвращает ответ иногда с xml-тегом 'DELIVERY_DATE', а иногда без него. Как написать if-условие, чтобы различать их, только без явного создания xml-документа, прямо из возвращаемого soap-ответа?
Я думаю, что надо написать 2 for-цикла: внешный перебырает WAYBILL ноды, а внутренный ищет внутри DELIVERY_DATE, но не могу написать правильные for-цикли.

Download zip:https://mega.nz

Пробовал так:

Код:
for i := 0 to FromServ.get_buyer_waybillsResult.XMLNode.ChildNodes.Count - 1 do
begin
strCreate_Date:=FromServ.get_buyer_waybillsResult.XMLNode.ChildNodes[i].ChildValues['CREATE_DATE'];
   strYear:=copy(strCreate_Date,1,4);
   strMonth:=copy(strCreate_Date,6,2);
   strDay:=copy(strCreate_Date,9,2);
strCreate_Date:=strDay+FormatSettings.DateSeparator+strMonth+FormatSettings.DateSeparator+strYear;

 if (FromServ.get_buyer_waybillsResult.XMLNode.ChildNodes.FindNode('DELIVERY_DATE')<>Nil) then
// or if (FromServ.get_buyer_waybillsResult.XMLNode.ChildNodes[i].NodeName='DELIVERY_DATE') then
begin
strDelivery_Date:=FromServ.get_buyer_waybillsResult.XMLNode.ChildNodes[i].ChildValues['DELIVERY_DATE'];
    strYear:=copy(strDelivery_Date,1,4);
    strMonth:=copy(strDelivery_Date,6,2);
    strDay:=copy(strDelivery_Date,9,2);
strDelivery_Date:=strDay+FormatSettings.DateSeparator+strMonth+FormatSettings.DateSeparator+strYear;
end
else ;

CDSGetBuyerWaybills.Append;
CDSGetBuyerWaybills.FieldByName('create_date').AsString:=strCreate_Date;
CDSGetBuyerWaybills.FieldByName('delivery_date').AsString:=strDelivery_Date;
CDSGetBuyerWaybills.FieldByName('activate_date').AsString:=strActivate_Date;
CDSGetBuyerWaybills.Post;
end;
но он никогда не находит тега <DELIVERY_DATE>, в цикле игнорируются оба оператора:
Код:
 if (FromServ.get_buyer_waybillsResult.XMLNode.ChildNodes.FindNode('DELIVERY_DATE')<>Nil) then...
и этот тоже:
Код:
if (FromServ.get_buyer_waybillsResult.XMLNode.ChildNodes[i].NodeName='DELIVERY_DATE') then...
тогда, когда в xml-е тег 'DELIVERY_DATE' точно есть.

Soap-ответ имеет вид:

Код:
   <?xml version="1.0"?>
        
    <WAYBILL_LIST xmlns="">
        <WAYBILL>
             <ID>206405566</ID>
             <TYPE>2</TYPE>
             <CREATE_DATE>2015-09-29T12:10:53</CREATE_DATE>
             <TRANSPORT_COAST>0</TRANSPORT_COAST>
             <DELIVERY_DATE>2015-10-03T10:34:43</DELIVERY_DATE>
             <STATUS>2</STATUS>
             <ACTIVATE_DATE>2015-09-29T12:10:55</ACTIVATE_DATE>
             <FULL_AMOUNT>279.99</FULL_AMOUNT>
             <CAR_NUMBER>UJU991</CAR_NUMBER>
             <WAYBILL_NUMBER>0198315109</WAYBILL_NUMBER>
             <CLOSE_DATE>2015-10-03T10:34:43</CLOSE_DATE>
             <S_USER_ID>26461</S_USER_ID>
             <BEGIN_DATE>2015-09-29T12:10:53</BEGIN_DATE>
       </WAYBILL>
       <WAYBILL>
             <ID>207247983</ID>
             <TYPE>2</TYPE>
             <CREATE_DATE>2015-10-03T12:20:09</CREATE_DATE>
             <TRANSPORT_COAST>0</TRANSPORT_COAST>
             <STATUS>1</STATUS>
             <ACTIVATE_DATE>2015-10-03T12:20:11</ACTIVATE_DATE>
             <FULL_AMOUNT>279.56</FULL_AMOUNT>
             <CAR_NUMBER>YPY088</CAR_NUMBER>
             <WAYBILL_NUMBER>0199129044</WAYBILL_NUMBER>
             <S_USER_ID>26461</S_USER_ID>
             <BEGIN_DATE>2015-10-03T12:20:09</BEGIN_DATE>
        </WAYBILL>
    </WAYBILL_LIST>
delphi159 вне форума Ответить с цитированием
Старый 04.10.2015, 21:54   #2
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

Вопрос закрыт. Решилось на stackoverflow так:
Код:
if FromServ.get_buyer_waybillsResult.XMLNode.ChildNodes[i].childnodes.FindNode('DELIVERY_DATE')<> nil
delphi159 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Спарсить данные из тега XML FleXik Общие вопросы Delphi 8 19.10.2014 02:39
Удаление XML тега [Smarik] C# (си шарп) 1 13.09.2013 08:09
Пытаюсь разобраться с API сайта (php+xml+soap) woulf PHP 0 17.12.2012 03:05
Как уменьшить количество знаков после запятой в ответе. Leshii Visual C++ 1 13.02.2012 01:08
Как в xml документе отредактировать имя тега? Ecosasha Общие вопросы Delphi 6 28.08.2011 10:52