<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 閱讀(9563) 評(píng)論(19)  編輯  收藏 所屬分類: Oracle

    評(píng)論:
    # re: 【原創(chuàng)】編寫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)】編寫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)】編寫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)】編寫Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-04 08:48 | Jam Chan
    @hyq
    路徑必須是真實(shí)存在的物理路徑,另外解析元素的時(shí)候要根據(jù)不同結(jié)構(gòu)的XML文件修改節(jié)點(diǎn)名稱和屬性名稱。
    如果文檔是如下結(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)】編寫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)】編寫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)】編寫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)】編寫Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-07 12:21 | .

    換了其他的路徑也還是不行
    可是我沒(méi)有用到directory啊,也不需要設(shè)置路徑
    權(quán)限也加了,還是不行呢
    你是怎么做的啊,就這么直接寫的啊?
    你是把路徑當(dāng)成參數(shù)寫進(jìn)去呢?  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫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)】編寫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)】編寫Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-04-10 21:53 | Jam Chan
    @ .
    哈哈,你說(shuō)所的blog上的文章就是我寫的這篇文章,10g我沒(méi)用過(guò),我用的是9i版本。
    我在其他機(jī)器上測(cè)試都是9i的……暫時(shí)無(wú)法在10g上測(cè)試,實(shí)在抱歉。  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫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)】編寫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)】編寫Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-05-22 10:20 | Jam Chan
    @binbin
    對(duì)不起,最近比較忙,我把截圖放在正文里了。  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-05-22 10:21 | Jam Chan
    @liuyi
    我估計(jì)9i和10g有些API的差異,許多朋友都是在10g上使用不了。解析的存儲(chǔ)過(guò)程思路應(yīng)該是我寫的邏輯,參考一下10g的API吧。  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2008-08-27 00:40 | 漂泊雪狼
    好東西啊!  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫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)】編寫Oracle存儲(chǔ)過(guò)程解析XML,并把數(shù)據(jù)持久化 2009-12-09 14:18 | wfjava
    不錯(cuò),挺好的,謝謝!  回復(fù)  更多評(píng)論
      
    # re: 【原創(chuàng)】編寫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级毛片网站| 国产一区二区三区在线观看免费| 波多野结衣久久高清免费| 在线A级毛片无码免费真人| 成年男女男精品免费视频网站| 国产精品亚洲综合一区在线观看| 色天使亚洲综合在线观看| 亚洲av午夜精品无码专区| 久久精品国产亚洲AV久| 亚洲欧洲日韩国产一区二区三区| 亚洲乱码在线播放| 亚洲国产激情在线一区| 无码欧精品亚洲日韩一区| 亚洲国产精品无码一线岛国| 四虎永久在线精品视频免费观看| 日本一区二区三区日本免费| 免费人成网站在线播放| 亚洲av午夜精品一区二区三区| 亚洲精品成人区在线观看| 中文字幕亚洲综合久久男男| 欧洲亚洲国产清在高| 国产精一品亚洲二区在线播放 | 欧美好看的免费电影在线观看 | 亚洲国产精品专区| 国产亚洲精品bv在线观看| 亚洲精品永久在线观看| 老司机午夜性生免费福利| 久久成人永久免费播放| 久久免费观看国产精品| 114级毛片免费观看| 午夜寂寞在线一级观看免费| 亚洲国产精品激情在线观看| 国产成人亚洲综合无码精品| 亚洲毛片一级带毛片基地| 亚洲精华国产精华精华液好用| 羞羞视频免费网站日本| 一级毛片免费播放| 免费黄色大片网站|