1. Información general
En oracle8i y versiones posteriores, se proporciona el método xmldom para realizar el procesamiento de datos en formato XML, pero en el desarrollo de aplicaciones del sistema de información empresarial real, se utilizan más en el programa (como java, .net y otros lenguajes de desarrollo). El xml proporcionado componente) para analizar datos XML, rara vez analiza directamente datos XML directamente en la base de datos ORACLE.
2. Proceso de procesamiento
Los datos XML pueden ser una cadena de caracteres (adecuada para procesar datos xml más pequeños), archivos físicos o campos CLOB (para procesar campos de datos xml más grandes); los siguientes datos XML se utilizan como ejemplo para describir el proceso de análisis.
Un ejemplo del formato de datos XML es el siguiente:
<xml version="1.0" encoding="GBK">
<items>
<unit>
<item>
<name>单位名称</name>
<value>JXDL</value>
</item>
<item>
<name>年新增归档数</name>
<value>330</value>
</item>
</unit>
</items>
</xml>
(1) Definir las reglas XML para analizar
Defina o determine las reglas XML para analizar, como se indicó anteriormente.
(2) Crear un analizador XML
Crear una instancia de analizador XML XMLPARSER.parser
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
(3) Definir el objeto del documento DOM
doc xmldom.DOMDocument;
(4) Definir otros objetos
Defina otros objetos necesarios para analizar XML, de la siguiente manera:
lenUnit integer;
lenItem integer;
unitNodes xmldom.DOMNodeList;
itemNodes xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
tempNode_unit xmldom.DOMNode;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap;
--================================
--以下变量用于获取XML节点的值
name varchar2(50);
value varchar2(20);
tmp integer;
--================================
xmlClobData clob;
(5) Obtener datos xml
Para obtener datos xml, se obtienen los siguientes supuestos del campo clob de la tabla de datos, de la siguiente manera:
select datastring into xmlClobData from p_xml_datainfo t where …… ;
(6) Análisis de datos xml
xmlPar := xmlparser.newParser;
--xmlparser.parseBuffer(xmlPar,xmlString);--
xmlparser.parseClob(xmlPar,xmlClobData);
doc := xmlparser.getDocument( xmlPar );
-- 释放解析器实例
xmlparser.freeParser(xmlPar);
-- 获取所有unit元素
unitNodes := xmldom.getElementsByTagName( doc, 'unit' );
lenUnit := xmldom.getLength( unitNodes );
--遍历所有unit元素
FOR i in 0..lenUnit-1
LOOP
--获取第i个unit
tempNode_unit := xmldom.item( unitNodes, i );
itemNodes:=xmldom.getChildNodes(tempNode_unit);
lenItem := xmldom.getLength( itemNodes );
FOR j in 0..lenItem-1
LOOP
tempNode := xmldom.item( itemNodes, j );
--获取子元素的值
chilNodes := xmldom.getChildNodes(tempNode);
tmp := xmldom.GETLENGTH( chilNodes );
name := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
value := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
DBMS_output.PUT_LINE(i||j,name,value);
end loop;
END LOOP;
(7) Liberar el objeto del documento
xmldom.freeDocument(doc);
(8) Manejo de excepciones y errores
EXCEPTION
WHEN OTHERS THEN
DBMS_output.PUT_LINE(SQLERRM);