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

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

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

    隨筆-14  評論-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 );

    解析并持久化的存儲過程代碼:
     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文檔對象
    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節點的值
    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   -- 釋放解析器實例
    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個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     --插入數據
    55     INSERT INTO PEOPLE VALUES (pid,name,address,tel,fax,email);
    56     COMMIT;
    57   END LOOP;
    58   -- 釋放文檔對象
    59   xmldom.freeDocument(doc);
    60   EXCEPTION
    61    WHEN OTHERS THEN
    62      DBMS_output.PUT_LINE(SQLERRM);
    63 END addPerson;


    有許多朋友都說執行時出現錯誤,現在我把我在Oracle9i使用的截圖貼出來,以作參考:


    存儲過程截圖
    posted on 2008-03-19 21:40 Jam Chan 閱讀(9564) 評論(19)  編輯  收藏 所屬分類: Oracle

    評論:
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化[未登錄] 2008-04-03 16:34 | hyq
    xmlparser.parse(xmlPar, file_path);

    ORA-29280: invalid directory path

    大哥,這個路徑怎么設置啊,我用了全路徑也報錯了。
    用指定了的Directories也錯  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-04-03 17:00 | .


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

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

    --然后在管理員權限下給用戶增加操作目錄的操作權限
    GRANT WRITE , READ ON DIRECTORY XmlDir TO SCOTT;
      回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-04-07 12:21 | .

    換了其他的路徑也還是不行
    可是我沒有用到directory啊,也不需要設置路徑
    權限也加了,還是不行呢
    你是怎么做的啊,就這么直接寫的???
    你是把路徑當成參數寫進去呢?  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-04-07 23:13 | Jam Chan
    我就是按照blog上這樣做的,沒有添加權限。
    而且在其他機器上使用也沒問題哦~~  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-04-10 13:45 | .
    哈哈,我又來了,我用的是oracle10g的數據庫。
    用裝xkd嗎?
    為什么我的總是報無效路進,氣死俺了~!~!
    可以把原來的那個bolg上的文章帖出來看看嘛~!~!  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-04-10 21:53 | Jam Chan
    @ .
    哈哈,你說所的blog上的文章就是我寫的這篇文章,10g我沒用過,我用的是9i版本。
    我在其他機器上測試都是9i的……暫時無法在10g上測試,實在抱歉。  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化[未登錄] 2008-04-26 17:16 | binbin
    我也試了你的過程,但也是路徑的問題,能否把你的執行過程貼出來,我想驗證一下我的執行過程是否對的,謝謝!  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-05-21 22:40 | liuyi
    我在10g上用報parser不是函數或過程錯誤!  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-05-22 10:20 | Jam Chan
    @binbin
    對不起,最近比較忙,我把截圖放在正文里了。  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-05-22 10:21 | Jam Chan
    @liuyi
    我估計9i和10g有些API的差異,許多朋友都是在10g上使用不了。解析的存儲過程思路應該是我寫的邏輯,參考一下10g的API吧。  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-08-27 00:40 | 漂泊雪狼
    好東西?。?nbsp; 回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2008-10-28 18:23 | maggie
    請問直接解析的話說怎么做呢?要在oracle 10g里解析這個XML文件,然后要用IF-THEN-ELSE這樣的語句!  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2009-12-09 14:18 | wfjava
    不錯,挺好的,謝謝!  回復  更多評論
      
    # re: 【原創】編寫Oracle存儲過程解析XML,并把數據持久化 2012-05-08 13:11 | dudu1930
    我也遇到了權限問題。如果你的數據庫服務器不是在本機,應該是會出錯的。因為sp在數據庫服務器上運行。在本地建立文件、賦權是沒有用的。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲欧洲日本天天堂在线观看| 亚洲综合小说另类图片动图| 777成影片免费观看| 国产精品亚洲四区在线观看| 国产一级大片免费看| 免费黄网站在线看| 亚洲日韩看片无码电影| 亚洲色欲色欲www在线丝| 青青视频观看免费99| av午夜福利一片免费看久久| 亚洲人成激情在线播放| 国产国拍亚洲精品福利| 97性无码区免费| a级成人毛片免费图片| 亚洲Av无码国产一区二区| 久久亚洲国产精品五月天| 免费看www视频| 日韩内射激情视频在线播放免费 | 亚洲欧美日韩自偷自拍| 亚洲中文字幕久久精品无码喷水| 国产情侣激情在线视频免费看| 久香草视频在线观看免费| 亚洲视频无码高清在线| 亚洲A∨无码无在线观看| 亚洲精品国产综合久久一线| 国产情侣激情在线视频免费看| a毛片免费在线观看| 国产精品亚洲色图| 亚洲色精品三区二区一区| 亚洲综合日韩中文字幕v在线 | 亚洲国产精品无码久久一区二区| 日韩精品免费电影| 99久久国产热无码精品免费| 182tv免费视频在线观看| 一级做a免费视频观看网站| 成人区精品一区二区不卡亚洲| 亚洲精品综合久久中文字幕| 亚洲av永久无码精品网站| 自拍偷自拍亚洲精品被多人伦好爽 | 99久久国产免费-99久久国产免费| 日日狠狠久久偷偷色综合免费|