Большой XML

lmdleon
Дата: 05.06.2006 20:22:03
С вебсервиса приходит большой респонз.

Проблемы такая:
1) Как его получить?
2) Как его парсить?

Кто-нибудь сталкивался?
lmdleon
Дата: 05.06.2006 20:38:06
Можно ли из BLOB сделать XMLTYPE???
lmdleon
Дата: 05.06.2006 21:44:13
тааак у меня ещё вопрос:

UTL_HTTP.READ_RAW читает бинарник неограниченной длинны?
lmdleon
Дата: 05.06.2006 21:46:41
"я" спасибо конечно, но это я читал уже. Там все примеры с короткими XML. На основе него я делал свое обращение к вебсервису, сейчас возникли проблемы из-за размера XML.
я
Дата: 05.06.2006 22:06:35
lmdleon
тааак у меня ещё вопрос:

UTL_HTTP.READ_RAW читает бинарник неограниченной длинны?

хз. навряд ли.
lmdleon
"я" спасибо конечно, но это я читал уже. Там все примеры с короткими XML. На основе него я делал свое обращение к вебсервису, сейчас возникли проблемы из-за размера XML.

java +sax parser
lmdleon
Дата: 05.06.2006 22:16:06
Мне надо внутри :)) pl/sql only :))

а насчет UTL_HTTP.READ_RAW, что нет в pl/sql озможности нормально бинарник прочитать?
Кщд
Дата: 06.06.2006 07:57:35
есть
в цикле
exelenc
Дата: 06.06.2006 08:08:40
На PL/SQL, насколько я помню, SAX'а нет (там же указатели на функции нужны для реализации) - значит прийдется строить DOM.

Для больших документов будьте готовы к большим тормозам.
Ловец Стрекоз
Дата: 06.06.2006 10:13:26
lmdleon

С вебсервиса приходит большой респонз.
1) Как его получить?
2) Как его парсить?
Кто-нибудь сталкивался?


Еще как. Вот так можно получить курсы валют с сайта ЦБ на сегодня.
Кстати, тема уже была в форуме.

set long 5000;
create or replace function get_clobFromUrl(p_url varchar2, p_charset varchar2 default 'UTF8') return clob is
  req   utl_http.req; 
  resp  utl_http.resp;
  val varchar2(32547);
  a clob;
BEGIN
  dbms_lob.createtemporary(a,true);
  dbms_lob.open(a,dbms_lob.lob_readwrite);
  req := utl_http.begin_request(p_url);
  utl_http.set_body_charset(req, p_charset);
  resp := utl_http.get_response(req);
  LOOP
    a := a||val;
    utl_http.read_text(resp, val, 5000);
  END LOOP;
  utl_http.end_response(resp);
  return a;
EXCEPTION
  WHEN utl_http.end_of_body THEN
    utl_http.end_response(resp);
    return a;
  WHEN others then
    utl_http.end_response(resp);
    raise;
END;
/


drop table xmls;

create table xmls (id number, des xmltype);
declare 
v varchar2(4000);
begin
v:=get_clobFromUrl('http://www.cbr.ru/scripts/XML_daily.asp?date_req='||to_char(SYSDATE,'DD/MM/YYYY'), 'CL8MSWIN1251');
insert into xmls values(1, XMLType(v));
end;
/

select * from xmls;