Oracle PL.SQL解析 XMl文件

-----------Xml 代码:

http://hamlzf.javaeye.com/blog/615559

 

<?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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</EMAIL>     
      </PERSON>     
</PEOPLE>

 

------------Sql 代码:

Declare
        Dir    Varchar2(50);
        Infile Varchar2(20);
        Errlog Varchar2(20);
        p      Xmlparser.Parser;
        Doc    Xmldom.Domdocument;
        N1     Xmldom.Domnodelist;
        Len1   Number(3);
        N2     Xmldom.Domnodelist;
        Len2   Number(3);
        N3     Xmldom.Domnodelist;
        Len3   Number(3);
        V1     Xmldom.Domnode;
        V2     Xmldom.Domnode;
        V3     Xmldom.Domnode;
        Attn   Xmldom.Domnode;
        Strsql Varchar2(200);
        Nnm    Xmldom.Domnamednodemap;
  Begin
        Dir    := 'F:/xml';
        Infile := 'people.xml';
        Errlog := 'err.log';
        p      := Xmlparser.Newparser;
        Xmlparser.Setvalidationmode(p, False);
        Xmlparser.Seterrorlog(p, Dir || '/' || Errlog);
        Xmlparser.Setbasedir(p, Dir);
        Xmlparser.Parse(p, Dir || '/' || Infile);
        Doc := Xmlparser.Getdocument(p);
        Xmlparser.Freeparser(p);
        N1   := Xmldom.Getelementsbytagname(Doc, 'PEOPLE');
        Len1 := Xmldom.Getlength(N1);
        For i In 0 .. Len1 - 1 Loop
          V1   := Xmldom.Item(N1, i);
          N2   := Xmldom.Getchildnodes(V1);
          Len2 := Xmldom.Getlength(N2);
          For j In 0 .. Len2 - 1 Loop
            Strsql := 'INSERT   INTO   POPLE   VALUES   (';
            V2     := Xmldom.Item(N2, j);
            If Xmldom.Getnodename(V2) = 'PERSON' Then
              Nnm    := Xmldom.Getattributes(V2);
              Attn   := Xmldom.Item(Nnm, 0);
              Strsql := Strsql || '''' || To_Char(Xmldom.Getnodevalue(Attn)) || '''';
            End If;
            N3   := Xmldom.Getchildnodes(V2);
            Len3 := Xmldom.Getlength(N3);
            For z In 0 .. Len3 - 1 Loop
              V3     := Xmldom.Item(N3, z);
              Strsql := Strsql || ',   ''' || To_Char(Xmldom.Getnodevalue(Xmldom.Getfirstchild(V3))) || '''';
            End Loop;
            Strsql := Strsql || ')';
            Dbms_Output.Put_Line(Strsql);
            Execute Immediate (Strsql);
            Commit;
            Strsql := '';
          End Loop;
        End Loop;
        --   释放文档对象     
        Xmldom.Freedocument(Doc);
End;

你可能感兴趣的:(oracle,xml,文档,insert,n2)