CftClub.ru
Клуб специалистов ЦФТ-Банк

Проблема с обработкой XML файла

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
Беляш
Участник


Вступление в Клуб: 30.04.2014
СообщениеПт Окт 16, 2015 09:02   Проблема с обработкой XML файла Ответить с цитатой
Полезность: Нет оценки
Разбираю в АБС XML файл таким способом:

Код:
v_file4:=[STDIO].open(P_FILE.[DST_PATH],P_FILE.[DST_NAME]||'temp','r');
   [STDIO].get_line(v_file4,v_buffer,false,[STDIO].WINTEXT);
      
      -- begin pl/sql
      vvar:=XMLType(v_buffer);
      doc:=DBMS_XMLDOM.NewDOMDocument(vvar);
      ndoc:=DBMS_XMLDOM.makeNode(doc);

      v_kol_zap:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/КоличествоПорученийПоЧастиМассива/text()');
      summ_reestr:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/ОбщаяСуммаПоМассиву/text()');
      period_mes:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/Месяц/text()');
      period_god:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/Год/text()');
      file_name:=getNodeValue(ndoc, '//ФайлПФР/ИмяФайла/text()');
      nom_pp:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/НомерПачки/Основной/text()');
      data_pp:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/ДатаСоставления/text()');
      -- end pl/sql


На маленьких файлах все работет отлично, но если файл больше 32кб - не работает.
Пробовал v_buffer объявлять как clob - ничего не меняет. Как обойти ограничение?
остальные переменные:
vvar XMLType;
ndoc DBMS_XMLDOM.DOMNode;
doc DBMS_XMLDOM.DOMDocument;
prankster
Профи


Вступление в Клуб: 22.08.2014
СообщениеПт Окт 16, 2015 09:27   Re: Проблема с обработкой XML файла Ответить с цитатой
Полезность: Нет оценки
Беляш пишет:
Разбираю в АБС XML файл таким способом:

Код:
v_file4:=[STDIO].open(P_FILE.[DST_PATH],P_FILE.[DST_NAME]||'temp','r');
   [STDIO].get_line(v_file4,v_buffer,false,[STDIO].WINTEXT);
      
      -- begin pl/sql
      vvar:=XMLType(v_buffer);
      doc:=DBMS_XMLDOM.NewDOMDocument(vvar);
      ndoc:=DBMS_XMLDOM.makeNode(doc);

      v_kol_zap:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/КоличествоПорученийПоЧастиМассива/text()');
      summ_reestr:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/ОбщаяСуммаПоМассиву/text()');
      period_mes:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/Месяц/text()');
      period_god:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/Год/text()');
      file_name:=getNodeValue(ndoc, '//ФайлПФР/ИмяФайла/text()');
      nom_pp:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/НомерПачки/Основной/text()');
      data_pp:=getNodeValue(ndoc, '//ФайлПФР/ПачкаВходящихДокументов/ВХОДЯЩАЯ_ОПИСЬ/ДатаСоставления/text()');
      -- end pl/sql


На маленьких файлах все работет отлично, но если файл больше 32кб - не работает.
Пробовал v_buffer объявлять как clob - ничего не меняет. Как обойти ограничение?
остальные переменные:
vvar XMLType;
ndoc DBMS_XMLDOM.DOMNode;
doc DBMS_XMLDOM.DOMDocument;


Здесь проблема в том, что вы получаете не весь файл, а его обрезанную до 32 кб часть (да и если в [STDIO].get_line параметр v_buffer - строковый, то не важно какого типа у вас v_buffer).

Читайте файл сразу в v_buffer с типом clob с помощью, например, ::[RUNTIME].[LOB_UTILS].file2clob (или же посмотрите в ней как читать файл в цикле), затем уже его в XMLType и разбор.
Беляш
Участник


Вступление в Клуб: 30.04.2014
СообщениеПт Окт 16, 2015 09:51    Ответить с цитатой
Полезность: Нет оценки
спасибо большое!!!!
всё получилось
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru