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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM