powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / парсинг XML (загрузка валют)
12 сообщений из 12, страница 1 из 1
парсинг XML (загрузка валют)
    #37248557
Nikolay_Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, не могу понять, в чем я ошибаюсь.
Есть web-сервис, который возвращает курсы валют. Пытаюсь разобрать ответ сервера, но ничего не получается...

Вот мой код:
Код: plaintext
1.
2.
3.
    resp := XMLType.createXML(soap_respond);
    resp := resp.extract('/soap:Envelope/soap:Body/child::node()', 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"');
    resp := resp.extract('/GetCursDynamicXMLResponse/child::node()', 'xmlns="http://web.bla-bla-bla.ru/"');
На последней итерации чилд выбирается, но из него уже ничего выбрать нельзя... Т.е. следующий код:
Код: plaintext
1.
2.
3.
4.
    dbms_output.put_line(resp.existsnode('/GetCursDynamicXMLResult'));
    dbms_output.put_line(resp.existsnode('/ValuteData', 'xmlns=""'));
    dbms_output.put_line(resp.existsnode('/ValuteCursDynamic'));
    dbms_output.put_line(resp.existsnode('/VCode'));
Возвращает сплошные нули.

Сам XML выглядит следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="utf-8"?>
 <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>
   <GetCursDynamicXMLResponse xmlns="http://web.bla-bla-bla.ru/">
    <GetCursDynamicXMLResult>
     <ValuteData xmlns="">
      <ValuteCursDynamic><CursDate> 2008 - 01 -10T00: 00 : 00 + 03 : 00 </CursDate><Vcode>R01235</Vcode>
                                                  <Vnom> 1 </Vnom><Vcurs> 24 . 4387 </Vcurs></ValuteCursDynamic>
      <ValuteCursDynamic><CursDate> 2008 - 01 -11T00: 00 : 00 + 03 : 00 </CursDate><Vcode>R01235</Vcode>
                                                  <Vnom> 1 </Vnom><Vcurs> 24 . 4796 </Vcurs></ValuteCursDynamic>
      <ValuteCursDynamic><CursDate> 2008 - 01 -12T00: 00 : 00 + 03 : 00 </CursDate><Vcode>R01235</Vcode>
                                                  <Vnom> 1 </Vnom><Vcurs> 24 . 3671 </Vcurs></ValuteCursDynamic>
      ...
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #37248568
bdsm_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нэймспейсы дальше указывай, они наследуются детьми
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #37248584
Nikolay_Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bdsm_sql,
Спасибо, больше! Помогло... А каким способом лучше всего добавить данные в БД? Я пока думаю использовать ref_cursor... Может что-то попроще есть?
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #37248593
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikolay_ChА каким способом лучше всего добавить данные в БД? Я пока думаю использовать ref_cursor...Индюк тоже думал, что думал. И не читал.
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #37248678
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikolay_ChА каким способом лучше всего добавить данные в БД? Я пока думаю использовать ref_cursor... Может что-то попроще есть?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
with t as ( select xmltype('<?xml version="1.0" encoding="utf-8"?>
 <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>
   <GetCursDynamicXMLResponse xmlns="http://web.bla-bla-bla.ru/">
    <GetCursDynamicXMLResult>
     <ValuteData xmlns="">
      <ValuteCursDynamic><CursDate>2008-01-10T00:00:00+03:00</CursDate><Vcode>R01235</Vcode>
                                                  <Vnom>1</Vnom><Vcurs>24.4387</Vcurs></ValuteCursDynamic>
      <ValuteCursDynamic><CursDate>2008-01-11T00:00:00+03:00</CursDate><Vcode>R01235</Vcode>
                                                  <Vnom>1</Vnom><Vcurs>24.4796</Vcurs></ValuteCursDynamic>
      <ValuteCursDynamic><CursDate>2008-01-12T00:00:00+03:00</CursDate><Vcode>R01235</Vcode>
                                                  <Vnom>1</Vnom><Vcurs>24.3671</Vcurs></ValuteCursDynamic>
     </ValuteData>
    </GetCursDynamicXMLResult>
   </GetCursDynamicXMLResponse>
  </soap:Body>
 </soap:Envelope>') x from dual
         )
select  to_timestamp_tz(CursDate,'yyyy-mm-dd"T"hh24:mi:ss"+"tzh:tzm') CursDate,
        Vcode,
        Vnom,
        Vcurs
  from  t,
        xmltable('/*/*/*/*/*/ValuteCursDynamic'
                 passing x
                 columns
                   CursDate varchar2( 30 ) path 'CursDate',
                   Vcode    varchar2( 10 ) path 'Vcode',
                   Vnom     number       path 'Vnom',
                   Vcurs    number       path 'Vcurs'
                )
/

CURSDATE                                                                    VCODE            VNOM      VCURS
--------------------------------------------------------------------------- ---------- ---------- ----------
 10 -JAN- 08   12 . 00 . 00 . 000000000  AM + 03 : 00                                       R01235               1      24 . 4387 
 11 -JAN- 08   12 . 00 . 00 . 000000000  AM + 03 : 00                                       R01235               1      24 . 4796 
 12 -JAN- 08   12 . 00 . 00 . 000000000  AM + 03 : 00                                       R01235               1      24 . 3671 

SQL> 

SY.
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #37248988
Nikolay_Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicNikolay_ChА каким способом лучше всего добавить данные в БД? Я пока думаю использовать ref_cursor...Индюк тоже думал, что думал. И не читал.
Да я и не отказываюсь прочитать... :) Но, к сожалению, как всегда времени не хватает. Руководство гонит, горят планы и прочеее и прочее. Хотя, думаю, что здесь я не одинок...
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #37248990
Nikolay_Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
Супер! Огромное человеческое спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
парсинг XML (загрузка валют)
    #39593187
Alexvf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени!
Пытался скопировать код из примера, но что то не выходит каменный цветок...
Вот что я накопировал. Помогите, плл, не понимаю что не так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t as
    (select xmltype('<?xml version="1.0" encoding="utf-8"?>
<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>
 <GetLastDownloadFileInfoResponse xmlns="http://fias.nalog.ru/WebServices/Public/DownloadService.asmx">
   <GetLastDownloadFileInfoResult>
     <VersionId>413</VersionId>
     <TextVersion>БД ФИАС от 18.01.2018</TextVersion>
     <FiasCompleteDbfUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_dbf.rar</FiasCompleteDbfUrl>
     <FiasCompleteXmlUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_xml.rar</FiasCompleteXmlUrl>
     <FiasDeltaDbfUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_delta_dbf.rar</FiasDeltaDbfUrl>
     <FiasDeltaXmlUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_delta_xml.rar</FiasDeltaXmlUrl>
     <Kladr4ArjUrl>http://fias.nalog.ru/Public/Downloads/20180118/BASE.ARJ</Kladr4ArjUrl>
     <Kladr47ZUrl>http://fias.nalog.ru/Public/Downloads/20180118/BASE.7Z</Kladr47ZUrl>
    </GetLastDownloadFileInfoResult>
  </GetLastDownloadFileInfoResponse>
</soap:Body>
</soap:Envelope>'    
    ) x from dual)
select xt.*
  from
    t,
     xmltable ('/*/*/*/*/GetLastDownloadFileInfoResponse'
                             passing (t.x)                                                                                                                    
                columns VersionId   number              path 'VersionId',                                                                                                                      
                        TextVersion varchar2(50)        path 'TextVersion',                                                                                                              
                        FiasXmlUrl  varchar2(2000)      path 'FiasDeltaXmlUrl'
              ) xt;
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #39593214
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexvf,

для начала GetLastDownloadFileInfoResult
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #39593218
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alexvf,

либо указывай xmlnamespaces
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
with t as
    (select xmltype('<?xml version="1.0" encoding="utf-8"?>
<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>
 <GetLastDownloadFileInfoResponse xmlns="http://fias.nalog.ru/WebServices/Public/DownloadService.asmx">
   <GetLastDownloadFileInfoResult>
     <VersionId>413</VersionId>
     <TextVersion>БД ФИАС от 18.01.2018</TextVersion>
     <FiasCompleteDbfUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_dbf.rar</FiasCompleteDbfUrl>
     <FiasCompleteXmlUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_xml.rar</FiasCompleteXmlUrl>
     <FiasDeltaDbfUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_delta_dbf.rar</FiasDeltaDbfUrl>
     <FiasDeltaXmlUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_delta_xml.rar</FiasDeltaXmlUrl>
     <Kladr4ArjUrl>http://fias.nalog.ru/Public/Downloads/20180118/BASE.ARJ</Kladr4ArjUrl>
     <Kladr47ZUrl>http://fias.nalog.ru/Public/Downloads/20180118/BASE.7Z</Kladr47ZUrl>
    </GetLastDownloadFileInfoResult>
  </GetLastDownloadFileInfoResponse>
</soap:Body>
</soap:Envelope>'    
    ) x from dual)
select xt.*
  from
    t,
     xmltable (xmlnamespaces(
                default 'http://fias.nalog.ru/WebServices/Public/DownloadService.asmx',
                'http://schemas.xmlsoap.org/soap/envelope' as "soap"
               ),
               '/soap:Envelope/soap:Body/GetLastDownloadFileInfoResponse/GetLastDownloadFileInfoResult'
                             passing (t.x)                                                                                                                    
                columns VersionId   number              path 'VersionId',                                                                                                                      
                        TextVersion varchar2(50)        path 'TextVersion',                                                                                                              
                        FiasXmlUrl  varchar2(2000)      path 'FiasDeltaXmlUrl'
              ) xt;


либо укажи, что надо искать в любых namespaces
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t as
    (select xmltype('<?xml version="1.0" encoding="utf-8"?>
<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>
 <GetLastDownloadFileInfoResponse xmlns="http://fias.nalog.ru/WebServices/Public/DownloadService.asmx">
   <GetLastDownloadFileInfoResult>
     <VersionId>413</VersionId>
     <TextVersion>БД ФИАС от 18.01.2018</TextVersion>
     <FiasCompleteDbfUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_dbf.rar</FiasCompleteDbfUrl>
     <FiasCompleteXmlUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_xml.rar</FiasCompleteXmlUrl>
     <FiasDeltaDbfUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_delta_dbf.rar</FiasDeltaDbfUrl>
     <FiasDeltaXmlUrl>http://fias.nalog.ru/Public/Downloads/20180118/fias_delta_xml.rar</FiasDeltaXmlUrl>
     <Kladr4ArjUrl>http://fias.nalog.ru/Public/Downloads/20180118/BASE.ARJ</Kladr4ArjUrl>
     <Kladr47ZUrl>http://fias.nalog.ru/Public/Downloads/20180118/BASE.7Z</Kladr47ZUrl>
    </GetLastDownloadFileInfoResult>
  </GetLastDownloadFileInfoResponse>
</soap:Body>
</soap:Envelope>'    
    ) x from dual)
select xt.*
  from
    t,
     xmltable ('/*/*/*:GetLastDownloadFileInfoResponse/*:GetLastDownloadFileInfoResult'
                             passing (t.x)                                                                                                                    
                columns VersionId   number              path '*:VersionId',                                                                                                                      
                        TextVersion varchar2(50)        path '*:TextVersion',                                                                                                              
                        FiasXmlUrl  varchar2(2000)      path '*:FiasDeltaXmlUrl'
              ) xt;

...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #39593220
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexvf,
1. Правильно считаем уровни. VersionId находится на 5, его родитель на 4.
2. Оращаем внимание на уровень 3. там появляется элемент namespace - . помним про замечание "они наследуются детьми"
3. смотрим сюда что делать при наличии namespace

в итоге получаем
Код: plsql
1.
2.
3.
4.
5.
with t as 
...
select xt.* from t, xmltable( xmlnamespaces ('http://fias.nalog.ru/WebServices/Public/DownloadService.asmx' as "n"), '/*/*/*/n:GetLastDownloadFileInfoResult' passing t.x 
columns ver number path 'n:VersionId'  
) xt
...
Рейтинг: 0 / 0
парсинг XML (загрузка валют)
    #39593231
Alexvf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большущщее спасибо всем ответившим!!!!!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / парсинг XML (загрузка валют)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]