Saltar al contenido
Codif铆ca.me | Desarrollo web | Programaci贸n

C贸mo crear XML usando DBMS_XMLDOM SQL PL/SQL

22 marzo, 2016

Creando XMLs usando DBMS_XMLDOM SQL PL/SQL

El paquete DBMS_XMLDOM se usa para generar o crear objetos XMLType e implementar el DOM (Document Object Model) generar objetos “webs” html-XML

El DOM define la estructura l贸gica de los documents (p谩ginas) y nos ofrece la posibilidad de manipular todos estos elementos.

xml

Esta es la documentaci贸n de Oracle acerca de DBMS_XMLDOM.

Para generar los nodos y las hojas de los nodos se emplean varios elementos:

Crear nuevo documento xml:newDomDocument
Crear nodos:makeNode
Crear hijos:appendChild
Crear elementos:createElement
Crear texto (valor) dentro del elemento:createTextNode
Obtener tipo de XML:getXmlType
Generar documento:freeDocument

Generar el XML PRUEBA

Esto es un ejemplo de c贸mo ser铆a el document PRUEBA, despu茅s de utilizar PLSQL para generar el XML

 

Este es un ejemplo de como se declarar铆a/realizar铆a un XML con DBMS_XMLDOM y SQL.

DECLARE  
 
  xml_cert xmltype;
 
  -- variables creacion documento xml
  l_domdoc                 dbms_xmldom.DOMDocument;     
  l_Document_element       dbms_xmldom.DOMElement;
  l_root_node              dbms_xmldom.DOMNode; 
 
 
 
BEGIN
 
   -- Se crea un Documento XML vacio
   l_domdoc := dbms_xmldom.newDomDocument;
 
   -- Se crea un nodo Raiz del documento
   l_root_node := dbms_xmldom.makeNode(l_domdoc);
 
   -- Se crea el elemento Document   
 
   l_Document_element := dbms_xmldom.createElement(l_domdoc, 'Nombre' );
   dbms_xmldom.setAttribute(l_Document_element, 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');      
   dbms_xmldom.setAttribute(l_Document_element, 'xmlns', 'http://www.ruta-del-esquema');      
   dbms_xmldom.setAttribute(l_Document_element, 'xsi:schemaLocation', 'http://www.ruta-del-esquema Esquema.xsd');      
 
   -- Se crea un nodo Document y se anade al nodo raiz
   l_Document_node := dbms_xmldom.appendChild( l_root_node
                                                , dbms_xmldom.makeNode(l_Document_element)
                                                );                                                
 
 
  -- Recuperar datos.
  -- Asignarlo a las variables
  -- Generar el XML con un LOOP .
 
   etiqueta := 'Nombre';
 
 
   -- Se crea un nodo autorizado y se anade al nodo Autorizado
   l_Autorizado_node := dbms_xmldom.appendChild(l_Document_node
                                            , dbms_xmldom.makeNode(dbms_xmldom.createElement(l_domdoc, 'Autorizado' ))
                                            );
   -- Se anade el contenido al nodo autorizado 
   l_textnode := dbms_xmldom.appendChild( l_Autorizado_node
                                          , dbms_xmldom.makeNode(dbms_xmldom.createTextNode(l_domdoc, autorizado ))
                                          );
 
   -- Finalizar el LOOP.                                       
 
  -- escribe el fichero xml
  xmldom.writetofile(l_domdoc, 'DIRECTORIO/NOMBREFICHERO.XML','ISO-8859-1');    
  dbms_xmldom.freeDocument(l_domdoc);   
 
 
 
END;

Cuando tienes que crear trescientos nodos para generar un XML grande, la tarea de asignar nodos , de identificar el padre, de recuparar los valores de los nodos, asignar los hijos etc, se vuelve una tarea un poco tediosa, o lo que es lo mismo un trabajo de chino.

Para evitar tener que volverte loco generando nodos , y toda la estructura, declarar las variables y dem谩s, he montado un generador de c贸digo XML, en el que asignas los nodos, de quienes son sus nodos superiores o padres, y si estos tienen o no valor.

Este es el link del generador de XML, pru茅balo y te devolver谩 el codigo as铆 como las variables que debes de integrar en tu declaraci贸n de variables, obviamente las variables y dem谩s te las devolver谩 siguiendo el patr贸n que he puesto en el ejemplo.