oracle解析xml_第1页
oracle解析xml_第2页
oracle解析xml_第3页
oracle解析xml_第4页
oracle解析xml_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ORACLExX华析 XML、引言2、现象描述3、处理过程XML数据可以为字符串(适合处理较小的 xml数据)、物理文件或CLO分段(处理较大的xml数据字段);以如下的XML数据 为例来描述该解析处理过程。XML数据格式示例如下:<?<xml version="1.0" encoding="GBK" ?> - <items> - <unit> - <item><nam弹位名称 </name><value>JXDL</value></item> -

2、 <item><name>年新增3档数 </name><value>330</value></item></unit></</items>步骤1:定义或确定要解析的XML规则,如上。步骤2:创建XML解析器实 例 XMLPARSER.parser如下:xmlPar XMLPARSER.parser :=XMLPARSER.NEWPARSER;步骤3:定义DOM文档对象,如下:doc xmldom.DOMDocument;步骤4:定义解析XML所需要的其他对象,如下:lenUnit intege

3、r;lenItem integer;unitNodes xmldom.DOMNodeList;itemNodes xmldom.DOMNodeList;chilNodes xmldom.DOMNodeList;tempNode_unit xmldom.DOMNode;tempNode xmldom.DOMNode;tempArrMap xmldom.DOMNamedNodeMap;-以下变量用于获取XML节点的值name varchar2(50);value varchar2(20);tmp integer;xmlClobData clob;步骤5:获取xml数据,以下假设从数据表的clob字

4、段中获取取,如下:2 / 16select datastring into xmlClobData from p_xml_datainfo t where 步骤 6: 解析 xml 数据,如下xmlPar := xmlparser.newParser;-xmlparser.parseBuffer(xmlPar,xmlString);-xmlparser.parseClob(xmlPar,xmlClobData);doc := xmlparser.getDocument( xmlPar );-释放解析器实例xmlparser.freeParser(xmlPar);-获取所有 unit 元素uni

5、tNodes := xmldom.getElementsByTagName( doc, 'unit' );lenUnit := xmldom.getLength( unitNodes );-遍历所有 unit 元素FOR i in0.lenUnit-1LOOP-获取第 i 个 unittempNode_unit := xmldom.item( unitNodes, i );itemNodes:=xmldom.getChildNodes(tempNode_unit);lenItem :=xmldom.getLength( itemNodes ); FOR j in0.lenIte

6、m-1LOOPtempNode := xmldom.item( itemNodes, j );-获取子元素的值chilNodes := xmldom.getChildNodes(tempNode); tmp :=xmldom.GETLENGTH( chilNodes ); name :=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes,0 );value :=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes,1 );DBMS_output.

7、PUT_LINE(i|j,name,value); end loop;END LOOP;步骤7:释放文档对象xmldom.freeDocument(doc);步骤8:异常与错误处理EXCEPTIONWHEN OTHERS THENDBMS_output.PUT_LINE(SQLERRM);4、原因分析5、经验总结通过在ORACL嗷据库中直接解析XML数据,能够更方便灵活 的处理 xml 数据,包括创建方法function ,存储过程procedure,以及作业JOR尤其是处理已经存储在数据表中的 XML 数据。示例:CREATE OR REPLACE PROCEDURECRM_TEMP.P_s

8、ys_EmployeesRoleInsert(strxml VARCHAR2,CreateID VARCHAR2,CreateIP VARCHAR2,CreateMacAddress VARCHAR2,CurApmodelID VARCHAR2,HRSiteID VARCHAR2)IStmpVar NUMBER;xmlParXMLPARSER.parser:=XMLPARSER.NEWPARSER;docxmldom.DOMDocument;pNodes xmldom.DOMNodeList;tempNode xmldom.DOMNode;tempArrMap xmldom.DOMNamedN

9、odeMap;tempRolelID nvarchar2(128);tempWorkNO nvarchar2(128);len int;n int ;v_RoleModelID NVARCHAR2 (128);v_RolelID NVARCHAR2(128);v_APModelID NVARCHAR2 (128);v_FunctionCode NVARCHAR2 (128);v_PAPModelID NVARCHAR2 (128);v_Count NVARCHAR2(64);I_CreateID NVARCHAR2(128); I_CreateIP NVARCHAR2(128);I_Creat

10、eMacAddress NVARCHAR2 (128);I_CurApmodelID NVARCHAR2(128);I_HRSiteID NVARCHAR2(128);BEGINIF strxml is not null THENBEGINI_CreateID := CreateID;I_CreateIP := CreateIP;I_CreateMacAddress:=CreateMacAddress;I_CurApmodelID:=CurApmodelID;I_HRSiteID := HRSiteID;v_Count := 0;XMLPARSER.PARSECLOB(xmlPar,strxm

11、l); doc:=XMLPARSER.getDocument( xmlPar );XMLPARSER.FREEPARSER(xmlPar);pNodes:=xmldom.getElementsByTagName(doc, 'tempWorkNO' );len:=xmldom.getLength(pNodes);tempNode := xmldom.item( pNodes, 0 );tempArrMap := xmldom.getAttributes(tempNode);tempRolelID:=xmldom.getNodeValue(xmldom.getNamedItem(t

12、empArrMap,'tempRolelID');tempWorkNO :=xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'t empWorkNO');DELETEFROM Sys_RoleEmployees aWHERE a.WORKNO = tempWorkNO AND a.HRSiteID=I_HRSiteID;FOR i in0.len-1LOOPtempNode := xmldom.item( pNodes, i ); tempArrMap :=xmldom.getAttributes(tempN

13、ode);tempRolelID:=xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'tempRolelID');tempWorkNO :=xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'t empWorkNO');INSERT INTO Sys_RoleEmployees(RoleEmployeesID,RolelID,WORKNO,createID,CreateIP,CreateMacAddress,CurApmodelID,HRSiteID)VAL

14、UES(SYS_GUID(),tempRolelID,tempWorkNO,I_CreateID,I_CreateIP,I_CreateMacAddress,I_CurApmodelID,I_HRSiteID);Commit;END LOOP;END;END IF;EXCEPTIONWHEN NODATAFOUND THENNULL;WHEN OTHERS THENROLLBACK;RAISE;END P_sys_EmployeesRoleInsert; /示例2.1<?xml version="1.0"?>2 <PEOPLE>3 <PERSO

15、N 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>10 <PERSON PERSONID="E02">11 <NAME>Bill Clinton</NAME>12 <ADDRESS&g

16、t;White House, USA</ADDRESS> 13 <TEL>(001) 6400 98765</TEL>14 <FAX>10 / 16(001) 6400 98769</FAX>17 <PERSON PERSONID="E03">18 <NAME>Tom Cruise</NAME>19 <ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>20 <TEL>(001) 4500 67859

17、</TEL>21 <FAX>(001) 4500 67895</FAX>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>30 <

18、/PERSON>31 </PEOPLE>我以 scott 用户为例, xx 表:1 CREATE TABLE PEOPLE2 (3 PERSONID VARCHAR24 4) PRIMARY KEY,5 NAME VARCHAR2(50),6 ADDRESS VARCHAR2(200),7 TEL VARCHAR2(20),8 FAX VARCHAR2(20),9 EMAIL VARCHAR2(100)10 );解析并持久化的存储过程代码:*file_path需要解析的XML文件路径如:D:OracleTestpeople.xml 3*log_path 保存日志的文件的路径如

19、D:OracleTestxmllog.txt 4 */56 CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_pathVARCHAR2)7 AS8 -/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

20、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 BEGIN28 xmlPar := xmlparser.newParser;29 xmlparser.setErrorLog( xmlPar, lo

21、g_path);30 xmlparser.parse(xmlPar, file_path);31 doc := xmlparser.getDocument( xmlPar );32 -释放解析器实例33 xmlparser.freeParser(xmlPar);34 -获取所有PERSO洸素35 personNodes := xmldom.getElementsByTagName( doc, 'PERSON' );36 len := xmldom.getLength( personNodes );37 -遍历所有PERSO洸素38 FOR i in0.len-139 LOOP40 -获取第i 个 PERSON41 tempNode := xmldom.item( personNodes, i );42 -所有属性43 tempArrMap := xmldom.getAttributes(tempNode);44 一获取PERSON曲值45pid :=xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,&#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论