Oracle usa PLSQL para procesar XML

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);

Supongo que te gusta

Origin blog.csdn.net/qq_25775675/article/details/131172705
Recomendado
Clasificación