<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-14  評(píng)論-34  文章-0  trackbacks-0
    需要解析的xml文件:people.xml
     1 <?xml version="1.0"?>
     2 <PEOPLE>
     3     <PERSON PERSONID="E01">
     4         <NAME>Tony Blair</NAME>
     5         <ADDRESS>10 Downing Street, London, UK</ADDRESS>
     6         <TEL>(061) 98765</TEL>
     7         <FAX>(061) 98768</FAX>
     8         <EMAIL>blair@everywhere.com</EMAIL>
     9     </PERSON>
    10     <PERSON PERSONID="E02">
    11         <NAME>Bill Clinton</NAME>
    12         <ADDRESS>White House, USA</ADDRESS>
    13         <TEL>(001) 6400 98765</TEL>
    14         <FAX>(001) 6400 98769</FAX>
    15         <EMAIL>bill@everywhere.com</EMAIL>
    16     </PERSON>
    17     <PERSON PERSONID="E03">
    18         <NAME>Tom Cruise</NAME>
    19         <ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
    20         <TEL>(001) 4500 67859</TEL>
    21         <FAX>(001) 4500 67895</FAX>
    22         <EMAIL>cruise@everywhere.com</EMAIL>
    23     </PERSON>
    24     <PERSON PERSONID="E04">
    25         <NAME>Linda Goodman</NAME>
    26         <ADDRESS>78 Crax Lane, London, UK</ADDRESS>
    27         <TEL>(061) 54 56789</TEL>
    28         <FAX>(061) 54 56772</FAX>
    29         <EMAIL>linda@everywhere.com</EMAIL>
    30     </PERSON>
    31 </PEOPLE>

    我以scott用戶為例,新建表:
    1 CREATE TABLE PEOPLE
    2 (
    3   PERSONID VARCHAR2(4PRIMARY KEY,
    4   NAME VARCHAR2(50),
    5   ADDRESS VARCHAR2(200),
    6   TEL VARCHAR2(20),
    7   FAX VARCHAR2(20),
    8   EMAIL VARCHAR2(100)
    9 );

    解析并持久化的存儲(chǔ)過(guò)程代碼:
     1 /**
     2 *file_path     需要解析的XML文件路徑 如:D:\OracleTest\people.xml
     3 *log_path      保存日志的文件的路徑  如: D:\OracleTest\xmllog.txt
     4 **/
     5 
     6 CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_path VARCHAR2)
     7 AS
     8 --//XML解析器
     9 xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
    10 --//DOM文檔對(duì)象
    11 doc xmldom.DOMDocument;
    12 len integer;
    13 personNodes xmldom.DOMNodeList;
    14 chilNodes xmldom.DOMNodeList;
    15 tempNode xmldom.DOMNode;
    16 tempArrMap xmldom.DOMNamedNodeMap;
    17 --================================
    18 --以下變量用于獲取XML節(jié)點(diǎn)的值
    19 pid varchar2(4);
    20 name varchar2(50);
    21 address varchar2(200);
    22 tel varchar2(20);
    23 fax varchar2(20);
    24 email varchar(100);
    25 tmp integer;
    26 --================================
    27 BEGIN
    28   xmlPar := xmlparser.newParser;
    29   xmlparser.setErrorLog( xmlPar, log_path);
    30   xmlparser.parse(xmlPar, file_path);
    31   doc := xmlparser.getDocument( xmlPar );  
    32   -- 釋放解析器實(shí)例
    33   xmlparser.freeParser(xmlPar);
    34   -- 獲取所有PERSON元素
    35   personNodes := xmldom.getElementsByTagName( doc, 'PERSON' );
    36   len := xmldom.getLength( personNodes );
    37   --遍歷所有PERSON元素
    38   FOR i in 0..len-1
    39   LOOP
    40     --獲取第i個(gè)PERSON
    41     tempNode := xmldom.item( personNodes, i );
    42     --所有屬性
    43     tempArrMap := xmldom.getAttributes(tempNode);
    44     --獲取PERSONID的值
    45     pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'PERSONID'));
    46     --獲取子元素的值
    47     chilNodes := xmldom.getChildNodes(tempNode);
    48     tmp := xmldom.GETLENGTH( chilNodes );
    49     name := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
    50     address := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
    51     tel := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 )));
    52     fax := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 )));
    53     email := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
    54     --插入數(shù)據(jù)
    55     INSERT INTO PEOPLE VALUES (pid,name,address,tel,fax,email);
    56     COMMIT;
    57   END LOOP;
    58   -- 釋放文檔對(duì)象
    59   xmldom.freeDocument(doc);
    60   EXCEPTION
    61    WHEN OTHERS THEN
    62      DBMS_output.PUT_LINE(SQLERRM);
    63 END addPerson;


    有許多朋友都說(shuō)執(zhí)行時(shí)出現(xiàn)錯(cuò)誤,現(xiàn)在我把我在Oracle9i使用的截圖貼出來(lái),以作參考:


    存儲(chǔ)過(guò)程截圖
    posted on 2008-03-19 21:40 Jam Chan 閱讀(9564) 評(píng)論(19)  編輯  收藏 所屬分類(lèi): Oracle

    評(píng)論:
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化[未登錄](méi) 2008-04-03 16:34 | hyq
    xmlparser.parse(xmlPar, file_path);

    ORA-29280: invalid directory path

    大哥,這個(gè)路徑怎么設(shè)置啊,我用了全路徑也報(bào)錯(cuò)了。
    用指定了的Directories也錯(cuò)  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-03 17:00 | .


    xmlparser.parse(xmlPar, file_path);
    file_path為D:\OracleTest\people.xml
    我的程序就會(huì)報(bào)無(wú)效路徑的錯(cuò)誤,請(qǐng)問(wèn)怎么解決:-)  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-04 08:44 | Jam Chan
    @ .
    必須存在這個(gè)路徑和文件才行哦~~
    D:\OracleTest\people.xml
    如果你的xml文件放在E:\AAA\temp.xml
    file_path就應(yīng)該為E:\AAA\temp.xml  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-04 08:48 | Jam Chan
    @hyq
    路徑必須是真實(shí)存在的物理路徑,另外解析元素的時(shí)候要根據(jù)不同結(jié)構(gòu)的XML文件修改節(jié)點(diǎn)名稱(chēng)和屬性名稱(chēng)。
    如果文檔是如下結(jié)構(gòu):
    <?xml version="1.0"?>
    <root>
    <human>1</human>
    <human>2</human>
    <human>3</human>
    </root>
    就應(yīng)該用xmldom.getElementsByTagName( doc, 'human' );  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-07 09:28 | .
    :-(
    xmlparser.parse(xmlPar, 'C:\datafile\person.xml');
    每次調(diào)試到這里都是報(bào)ORA-29280: invalid directory path 錯(cuò)誤
    在C:\datafile 路徑里也有person.xml但還是報(bào)錯(cuò)。。。
      回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-07 10:03 | .
    xmlparser.setErrorLog(xmlPar, 'C:\datafile\xmllog.txt');
    調(diào)試倒這里也是報(bào)錯(cuò)。ORA-31020: The operation is not allowed, Reason: Not supported
    是不是要設(shè)置什么呀。這個(gè)百度里搜了下,也沒(méi)解決的。  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-07 10:08 | Jam Chan
    @ .
    可能是權(quán)限不足的問(wèn)題,你用sys登陸增加權(quán)限試試:

    --首先定義一個(gè)文件目錄的別名
    CREATE DIRECTORY XmlDir AS 'C:\datafile';

    --然后在管理員權(quán)限下給用戶增加操作目錄的操作權(quán)限
    GRANT WRITE , READ ON DIRECTORY XmlDir TO SCOTT;
      回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-07 12:21 | .

    換了其他的路徑也還是不行
    可是我沒(méi)有用到directory啊,也不需要設(shè)置路徑
    權(quán)限也加了,還是不行呢
    你是怎么做的啊,就這么直接寫(xiě)的啊?
    你是把路徑當(dāng)成參數(shù)寫(xiě)進(jìn)去呢?  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-07 23:13 | Jam Chan
    我就是按照blog上這樣做的,沒(méi)有添加權(quán)限。
    而且在其他機(jī)器上使用也沒(méi)問(wèn)題哦~~  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-10 13:45 | .
    哈哈,我又來(lái)了,我用的是oracle10g的數(shù)據(jù)庫(kù)。
    用裝xkd嗎?
    為什么我的總是報(bào)無(wú)效路進(jìn),氣死俺了~!~!
    可以把原來(lái)的那個(gè)bolg上的文章帖出來(lái)看看嘛~!~!  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-10 21:53 | Jam Chan
    @ .
    哈哈,你說(shuō)所的blog上的文章就是我寫(xiě)的這篇文章,10g我沒(méi)用過(guò),我用的是9i版本。
    我在其他機(jī)器上測(cè)試都是9i的……暫時(shí)無(wú)法在10g上測(cè)試,實(shí)在抱歉。  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化[未登錄](méi) 2008-04-26 17:16 | binbin
    我也試了你的過(guò)程,但也是路徑的問(wèn)題,能否把你的執(zhí)行過(guò)程貼出來(lái),我想驗(yàn)證一下我的執(zhí)行過(guò)程是否對(duì)的,謝謝!  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-05-21 22:40 | liuyi
    我在10g上用報(bào)parser不是函數(shù)或過(guò)程錯(cuò)誤!  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-05-22 10:20 | Jam Chan
    @binbin
    對(duì)不起,最近比較忙,我把截圖放在正文里了。  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-05-22 10:21 | Jam Chan
    @liuyi
    我估計(jì)9i和10g有些API的差異,許多朋友都是在10g上使用不了。解析的存儲(chǔ)過(guò)程思路應(yīng)該是我寫(xiě)的邏輯,參考一下10g的API吧。  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-08-27 00:40 | 漂泊雪狼
    好東西啊!  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-10-28 18:23 | maggie
    請(qǐng)問(wèn)直接解析的話說(shuō)怎么做呢?要在oracle 10g里解析這個(gè)XML文件,然后要用IF-THEN-ELSE這樣的語(yǔ)句!  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2009-12-09 14:18 | wfjava
    不錯(cuò),挺好的,謝謝!  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫(xiě)Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2012-05-08 13:11 | dudu1930
    我也遇到了權(quán)限問(wèn)題。如果你的數(shù)據(jù)庫(kù)服務(wù)器不是在本機(jī),應(yīng)該是會(huì)出錯(cuò)的。因?yàn)閟p在數(shù)據(jù)庫(kù)服務(wù)器上運(yùn)行。在本地建立文件、賦權(quán)是沒(méi)有用的。  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 国产亚洲精品资在线| 中国在线观看免费高清完整版 | 在线看片免费不卡人成视频| 免费A级毛片无码视频| 日韩中文字幕免费视频| 午夜不卡久久精品无码免费| 久久青草91免费观看| 少妇无码一区二区三区免费| 久久久久久AV无码免费网站下载 | 亚洲日韩国产二区无码| 亚洲综合激情五月丁香六月 | 国产亚洲精品看片在线观看| 亚洲综合伊人久久综合| 国产AV无码专区亚洲AV男同| 亚洲AV无码专区电影在线观看| 亚洲精品免费观看| 亚洲免费中文字幕| 亚洲国产精品久久久久秋霞小| 在线精品自拍亚洲第一区| xxxxx做受大片视频免费| 成在人线av无码免费高潮喷水| 日本免费人成网ww555在线| 中国人xxxxx69免费视频| 一级女人18毛片免费| 全免费A级毛片免费看网站| 无码不卡亚洲成?人片| 日韩va亚洲va欧洲va国产| 亚洲国产日韩在线成人蜜芽 | 亚洲AV成人一区二区三区在线看| 亚洲男同gay片| 一级做a爱过程免费视| 无码人妻一区二区三区免费看| 69成人免费视频| 亚洲Av无码国产情品久久| 亚洲A∨无码一区二区三区| 亚洲娇小性色xxxx| 乱人伦中文视频在线观看免费| 日本免费中文视频| 成人免费无毒在线观看网站| 亚洲综合色视频在线观看| 久久精品国产亚洲AV香蕉|