ORACLE 读取XML文件


DECLARE
    --:定义或确定要解析的XML规则,如上。

    --步骤2:创建XML解析器实例XMLPARSER.parser,如下:

    xmlpar xmlparser.parser := xmlparser.newparser;

    --步骤3:定义DOM文档对象,如下:

    doc xmldom.domdocument;

    --步骤4:定义解析XML所需要的其他对象,如下:
    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;
BEGIN
    --步骤5:获取xml数据,以下假设从数据表的clob字段中获取取,如下:
    BEGIN
        xmlclobdata := '<?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 version="1.0" encoding="GBK" ?>
                      <parameters>
                       <RemittanceParameterItem>
                        <LeagueCompanyId>2001116</LeagueCompanyId>
                        <CompanyId>1000</CompanyId>
                        <RemittanceValue>65000.0</RemittanceValue>
                        <RemittanceToken>9591503</RemittanceToken>
                        <RemittanceDateTime>2018-09-26T14:51:22.0Z</RemittanceDateTime>
                        <Remark>640001391210002018</Remark>
                        </RemittanceParameterItem>
                        </parameters>';
                 **%
                      --步骤6:解析xml数据,如下
                       xmlpar := xmlparser.newparser;
        --xmlparser.parseBuffer(xmlPar,xmlString);--
        xmlparser.parseclob(xmlpar, xmlclobdata);
        doc := xmlparser.getdocument(xmlpar);
        -- 释放解析器实例
        xmlparser.freeparser(xmlpar);
        -- 获取所有unit元素
        unitnodes := xmldom.getelementsbytagname(doc, 'parameters');
        lenunit := xmldom.getlength(unitnodes);
        dbms_output.put_line(lenunit);
        --遍历所有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);
            dbms_output.put_line(lenitem);
            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:释放文档对象
        xmldom.freedocument(doc);
        --步骤8:异常与错误处理
    EXCEPTION
        WHEN OTHERS THEN
            dbms_output.put_line(SQLERRM);
    END;
END;

posted on 2018-10-09 14:09  BUG创造者  阅读(2488)  评论(0编辑  收藏  举报

导航