当前位置: 代码迷 >> Oracle管理 >> oracle 10g里如何解析XML文件?很急请大家帮帮忙!多谢
  详细解决方案

oracle 10g里如何解析XML文件?很急请大家帮帮忙!多谢

热度:40   发布时间:2016-04-24 05:52:45.0
oracle 10g里怎么解析XML文件?很急,请大家帮帮忙!谢谢!
要在oracle 10g解析一个XML解析,怎么解析?请大家帮忙提点意见,万分感谢!

------解决方案--------------------
SQL code
例子如下:CREATE DIRECTORY test AS 'c:\';GRANT WRITE ,READ ON DIRECTORY test TO lgt;emp.xml文件的内容如下:<?xml version="1.0"?> <PEOPLE>     <PERSON PERSONID="E01">         <NAME>Tony Blair </NAME>         <ADDRESS>10 Downing Street, London, UK </ADDRESS>         <TEL>(061) 98765 </TEL> <FAX>(061) 98768 </FAX>         <EMAIL>blair@everywhere.com </EMAIL>     </PERSON>     <PERSON PERSONID="E02">         <NAME>Bill Clinton </NAME>         <ADDRESS>White House, USA </ADDRESS>         <TEL>(001) 6400 98765 </TEL> <FAX>(001) 6400 98769 </FAX>         <EMAIL>bill@everywhere.com </EMAIL>     </PERSON>     <PERSON PERSONID="E03">         <NAME>Tom Cruise </NAME>         <ADDRESS>57 Jumbo Street, New York, USA </ADDRESS>         <TEL>(001) 4500 67859 </TEL> <FAX>(001) 4500 67895 </FAX>         <EMAIL>cruise@everywhere.com </EMAIL>     </PERSON>     <PERSON PERSONID="E04">         <NAME>Linda Goodman </NAME>         <ADDRESS>78 Crax Lane, London, UK </ADDRESS>         <TEL>(061) 54 56789 </TEL> <FAX>(061) 54 56772 </FAX>         <EMAIL>linda@everywhere.com </EMAIL>     </PERSON> </PEOPLE>   CREATE TABLE PEOPLE (     PERSONID VARCHAR2(10),     NAME VARCHAR2(20),     ADDRESS VARCHAR2(60),     TEL  VARCHAR2(20),     FAX  VARCHAR2(20),     EMAIL VARCHAR2(40) ); CREATE OR REPLACE PROCEDURE XML2TABLE(DIR     VARCHAR2,                                      INPFILE VARCHAR2 ) IS  P   XMLPARSER.PARSER;  DOC XMLDOM.DOMDOCUMENT;  PROCEDURE READELEMENTS(DOC XMLDOM.DOMDOCUMENT) IS    NL     XMLDOM.DOMNODELIST;    LEN    NUMBER;    N      XMLDOM.DOMNODE;    ATTN   XMLDOM.DOMNODE;    NNM    XMLDOM.DOMNAMEDNODEMAP;    NL2    XMLDOM.DOMNODELIST;    LEN2   NUMBER;    STRSQL VARCHAR2(1000);  BEGIN    NL  := XMLDOM.GETELEMENTSBYTAGNAME(DOC, 'PERSON');    LEN := XMLDOM.GETLENGTH(NL);    FOR I IN 0 .. LEN - 1 LOOP      STRSQL := 'INSERT INTO PEOPLE VALUES (';      N      := XMLDOM.ITEM(NL, I);      IF XMLDOM.GETNODENAME(N) = 'PERSON' THEN        NNM    := XMLDOM.GETATTRIBUTES(N);         ATTN   := XMLDOM.ITEM(NNM, 0);        STRSQL := STRSQL || '''' || XMLDOM.GETNODEVALUE(ATTN) || '''';      END IF;      NL2  := XMLDOM.GETCHILDNODES(N);     LEN2 := XMLDOM.GETLENGTH(NL2);      FOR J IN 0 .. LEN2 - 1 LOOP        N      := XMLDOM.ITEM(NL2, J);        STRSQL := STRSQL || ', ''' ||                  XMLDOM.GETNODEVALUE(XMLDOM.GETFIRSTCHILD(N)) || '''';      END LOOP;      STRSQL := STRSQL || ')';      -- dbms_output.put_line(strSQL);       EXECUTE IMMEDIATE (STRSQL);     END LOOP;    COMMIT;    DBMS_OUTPUT.PUT_LINE('');  END READELEMENTS;BEGIN  P := XMLPARSER.NEWPARSER;  XMLPARSER.SETVALIDATIONMODE(P, FALSE);  XMLPARSER.SETBASEDIR(P, DIR);   XMLPARSER.PARSE(P, DIR ||'/' ||INPFILE);   DOC := XMLPARSER.GETDOCUMENT(P);  XMLPARSER.FREEPARSER(P);  DBMS_OUTPUT.PUT_LINE('读取文文件元素并保存到表 PEOPLE 中.');  READELEMENTS(DOC);  XMLDOM.FREEDOCUMENT(DOC);END XML2TABLE;/BEGIN  XML2TABLE('TEST', 'emp.xml');END;/select *from perople;
------解决方案--------------------
探讨
SQL code
例子如下:
CREATE DIRECTORY test AS 'c:\';
GRANT WRITE ,READ ON DIRECTORY test TO lgt;

emp.xml文件的内容如下:
<?xml version="1.0"?>
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair </NAME>
<ADDRESS>10 Downing Street, London, UK </ADDRESS>
  相关解决方案