Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / парсинг XML (загрузка валют) / 12 сообщений из 12, страница 1 из 1
06.05.2011, 00:01
    #37248557
Nikolay_Ch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
Коллеги, не могу понять, в чем я ошибаюсь.
Есть 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
06.05.2011, 00:12
    #37248568
bdsm_sql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
нэймспейсы дальше указывай, они наследуются детьми
...
Рейтинг: 0 / 0
06.05.2011, 00:28
    #37248584
Nikolay_Ch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
bdsm_sql,
Спасибо, больше! Помогло... А каким способом лучше всего добавить данные в БД? Я пока думаю использовать ref_cursor... Может что-то попроще есть?
...
Рейтинг: 0 / 0
06.05.2011, 00:33
    #37248593
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
Nikolay_ChА каким способом лучше всего добавить данные в БД? Я пока думаю использовать ref_cursor...Индюк тоже думал, что думал. И не читал.
...
Рейтинг: 0 / 0
06.05.2011, 02:18
    #37248678
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
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
06.05.2011, 10:12
    #37248988
Nikolay_Ch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
ElicNikolay_ChА каким способом лучше всего добавить данные в БД? Я пока думаю использовать ref_cursor...Индюк тоже думал, что думал. И не читал.
Да я и не отказываюсь прочитать... :) Но, к сожалению, как всегда времени не хватает. Руководство гонит, горят планы и прочеее и прочее. Хотя, думаю, что здесь я не одинок...
...
Рейтинг: 0 / 0
06.05.2011, 10:13
    #37248990
Nikolay_Ch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
SY,
Супер! Огромное человеческое спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.01.2018, 11:20
    #39593187
Alexvf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
Всем доброго времени!
Пытался скопировать код из примера, но что то не выходит каменный цветок...
Вот что я накопировал. Помогите, плл, не понимаю что не так

Код: 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
30.01.2018, 11:43
    #39593214
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
Alexvf,

для начала GetLastDownloadFileInfoResult
...
Рейтинг: 0 / 0
30.01.2018, 11:46
    #39593218
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
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
30.01.2018, 11:46
    #39593220
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
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
30.01.2018, 11:56
    #39593231
Alexvf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсинг XML (загрузка валют)
Большущщее спасибо всем ответившим!!!!!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / парсинг XML (загрузка валют) / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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