Проблема с обработкой XML файла
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Беляш Участник
Вступление в Клуб: 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   |
|
Полезность: Нет оценки
|
спасибо большое!!!!
всё получилось |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|