Eu vi uma solução pra um erro semelhante assim: (Doc ID 1302083.1)
Código original: (Não funcionando)
Selecionar tudo
DECLARE
parser xmlParser.parser;
newDomDoc xmlDom.domDocument;
retdoc xmlDom.domDocument;
newElem xmlDom.domElement;
BEGIN
parser := xmlParser.newParser;
xmlparser.parse(parser,'/home/scott/test.xml');
retdoc := xmlParser.getDocument(parser);
newElem:=xmlDom.getDocumentElement(retdoc);
END;
/
O XML possui um caracter na primeira linha:
Quando esse 220, 221 é removido, o xml roda normal.
Sugestão:
Criar um diretório
Criar uma procedure que LE o xml e guarda num clob:
Selecionar tudo
create or replace function getDocument(filename varchar2,chrset varchar2 default 'UTF8') return clob authid current_user is
xbfile bfile;
xclob clob;
destination_offset INTEGER := 1;
source_offset INTEGER := 1;
language_context INTEGER := DBMS_LOB.default_lang_ctx;
warning_message INTEGER;
begin
xbfile := bfilename('XMLTSTDIR',filename);
dbms_lob.open(xbfile);
dbms_lob.createtemporary(xclob,TRUE,dbms_lob.session);
DBMS_LOB.LOADCLOBFROMFILE(xclob,xbfile, dbms_lob.getlength(xbfile), destination_offset, source_offset,NLS_CHARSET_ID(chrset),language_context, warning_message);
dbms_lob.close(xbfile);
return xclob;
end;
/
Chamar a nova procedure:
Selecionar tudo
DECLARE
parser dbms_xmlparser.parser;
newDomDoc xmlDom.domDocument;
retdoc clob;
newElem xmlDom.domElement;
BEGIN
parser := xmlParser.newParser;
retdoc := getDocument('SampleOriginal.xml','AL16UTF16LE');
DBMS_XMLPARSER.PARSECLOB(parser,retdoc);
newDomDoc := xmlParser.getDocument(parser);
newElem:=xmlDom.getDocumentElement(newDomDoc);
END;
/
PL/SQL procedure successfully completed.
Vou dar uma olhada nos anexos que você mandou.