Olá a todos os mestres...

tenho que ler um arquivo xml e inserir numa tabela tenporaria...
o meu banco é este:

Oracle8i Release 8.1.7.4.1 - Production
PL/SQL Release 8.1.7.3.0 - Production
CORE    8.1.7.2.1       Production

Como é no 8i foi instalado um pacote para trabalhar com xml.

crie esta rotininha para testar e ai começaram as dúvidas que estão 
me deixando louco.

rotina
++++++

declare
     v_doc_text    varchar2(5000);
     v_parser      xmlparser.parser;
     v_doc         xmldom.domdocument;
     v_n           xmldom.domnode;
     nnm           xmldom.DOMNamedNodeMap;
     n_l           xmldom.DOMnodelist;
     attrname      varchar2(100);
     attrval       varchar2(100);
     len2          number;
     n             xmldom.DOMNode;
     vcLocalNm     varchar2(1000);
     sOutput       varchar2(1000);
     
     z             xmldom.DOMNode;
begin
     v_doc_text :='<?xml version="1.0" encoding="ISO-8859-1" ?>
                   <mensagemTISS 
xmlns="http://www.w3.org/2001/XMLSchema"; 
xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas";>
                   <cabecalho>
                   <identificacaoTransacao>
                   <tipoTransacao>ENVIO_LOTE_GUIAS</tipoTransacao>
                   <sequencialTransacao>1137</sequencialTransacao>
                   <dataRegistroTransacao>2007-06-
17</dataRegistroTransacao>
                   
<horaRegistroTransacao>13:19:01</horaRegistroTransacao>
                   </identificacaoTransacao>
                   <origem>
                   <codigoPrestadorNaOperadora>
                   <CNPJ>50984517000130</CNPJ>
                   </codigoPrestadorNaOperadora>
                   </origem><destino>
                   <registroANS>005711</registroANS>
                   </destino>
                   <versaoPadrao>2.01.02</versaoPadrao>
                   </cabecalho>
                   </mensagemTISS>';

     v_parser  :=xmlparser.newParser;
     xmlparser.parseBuffer(v_parser,v_doc_text);
     v_doc     :=xmlparser.getDocument(v_parser);
     n_l       :=xmldom.getElementsByTagName(v_doc,'*');
     len2      :=xmldom.getlength(n_l);
 

     for i in 0..len2-1 loop
          n:=xmldom.item(n_l,i);

          DBMS_OUTPUT.PUT_line('Nome tag : ' || xmldom.getNodeName(n) 
|| '-' );
          n:=xmldom.getfirstchild(n);
          
          if not xmldom.IsNull(n) and xmldom.getNodeValue(n) is not 
null then 
            DBMS_OUTPUT.PUT_line('valor : ' || 
            substr(xmldom.getNodeValue(n) ,1,150)|| ' ' ); 
          end if; 

     end loop;
     
     xmlparser.freeParser(v_parser);
     xmldom.freeDocument(v_doc);
end;

retorno 
+++++++

Nome tag : mensagemTISS-
Nome tag : cabecalho-
Nome tag : identificacaoTransacao-
Nome tag : tipoTransacao-
valor tag : ENVIO_LOTE_GUIAS 
Nome tag : sequencialTransacao-
valor tag : 1137 
Nome tag : dataRegistroTransacao-
valor tag : 2007-06-17 
Nome tag : horaRegistroTransacao-
valor tag : 13:19:01 
Nome tag : origem-
Nome tag : codigoPrestadorNaOperadora-
Nome tag : CNPJ-
valor tag : 50984517000130 
Nome tag : destino-
Nome tag : registroANS-
valor tag : 005711 
Nome tag : versaoPadrao-
valor tag : 2.01.02 


este foi o retorno da minha rorina.....este arquivo xml é bem simples
mas vou ter um arquivo bem complexo com "n" guias...

primeira duvida .....
como fazer um controle para saber em qual das guias que estou ?
vou ter tags que se repetem dentro de um mesmo arquivo e como vou 
diferenciar ?

Agradeço a atenção
jeferson

Responder a