使用PLSQL开发人员如何解析XML文件_第1页
使用PLSQL开发人员如何解析XML文件_第2页
使用PLSQL开发人员如何解析XML文件_第3页
使用PLSQL开发人员如何解析XML文件_第4页
使用PLSQL开发人员如何解析XML文件_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、使用PL/SQL如何解析XML学习篇-XML文件解析文档作者:Siman.HeMSN:Simanhe_创建日期:2009-5-22更新日期:2009-5-22文档编号:DocumentReferenceNumber当前版本:Draft1.0文档控制变更记录日期作者版本变更说明07/04/08IBM1.03审阅姓名职位分发拷贝编号姓名位置/岗位1资料室主管项目资料室2项目组成员34目录文档控制 ii概述 4XML 组建 4XML 结构图 4XML 常用的分析函数 5XMLParser5XMLDOM5XML 解析实例 7文件的结构 8解析方案 8XML 解析脚本 9更改历史 12.概述使用XML文

2、件传输数据, 现在已经被越来越多的项目所采纳。 其做法通常是用额外开发的java程序来解析XML数据。其实Oracle已经为XML配备了一套功能健全的工具集,1工具集允许PL/SQL和Java开发人员在Oracle数据库内部进行工作。本文简要地概述了XML特性和适用于Oracle数据库的实用程序,描述如何设置并使用面向XML的OraclePL/SQL分析程序,然后介绍了一个实例程序,该程序分析PL/SQL内的XML信息。XML 组建在PL/SQL中利用XML,Oracle提供了几个组件,让开发人员能轻松地利用XML技术。这些组件包括:1. XML分析程序。即用来分析、构造和验证XML文档。.2

3、. XPath引擎。它是使用Xpath(XML标准的另一个元素)说明语法在内存中搜索XML文档的实用程序。SLT处理器。它在Oracle数据库中支持XSLT,允许您把XML文档转换成其他格式。3. XMLSQL实用程序。可以使用SQL产生XML文档,使您可以在Oracle数据库表格中轻松地插入基于XML的数据。XSQL页。一项可以汇集声明性XML数据然后通过XSLT公布这些数据的技术。对于PL/SQL开发人员而言,XML分析程序是最重要的组件。通过它,您可以在Oracle数据库中分析、操纵和转换XML文档。ML分析程序由一套APIs(应用程序编程接口)构成。XML 结构图NodeCDATASe

4、ctionComfn&ntXML 常用的分析函数XMLParser包括分析 XML 文档所需的数据类型和程序。XMLParsingProcess想知道 Oracle 的 parser 是如何调用 Java 来做解析的,请查看Oracle?XMLDevelopersKitProgrammersGuide10gRelease2(10.2)PartNumberB14252-01网址:http: XML 文档对象模型(DOM)元素所需的数据类型和程序ComparingDOM(Tree-Based)andSAX(Event-Based)APIsTheDOIMinterfacecreatesaTR

5、EEstructurebasedontheXMLDocumentTheSAXInterlacecreatesaseriesoflineareventsbasedontheXMLdocumentstrtdocmnientBtrtelement:EMELITstartelement:EMfstartelgmst;ENAMEchdratterg;MARVendelefment:ENAMEendelement:EMPstartelement:BMPstartelementiENAMEchraciterE?;SC0TTendelemenv:EMAMEendelement:EMPendelement:HM

6、PLITenddocumentUseful10rappicatonssu:i-assearchAndretrievalThardonotchangethe*XMLtree*,XMLDOM 这个程序包,其实是通过封装 Java 程序来解析 XML 的一个 PL/SQL 的包。具体的作用还是要参考 Oracle?DatabasePL/SQLPackagesandTypesReference10gRelease2(10.2)PartNumberB14258-02网址:http:/ 解析实例案列:XML 文件:simanhe_test.xml画EIJ4:12_上1:。向1测试 1窖窖生僻字IName测

7、试 2Comment看一看|_|测试 3瞅一瞅Name测试 4Comment试一试Name测试 5Comment爽一爽200文件的结构解析方案在 XMLDOM 的解析过程中,如果想找某个节点(Fitem)的属性(RecErrCode),而该节点又不是根节点时,需要从最小的节点往上找父节点,一直到节点 Fitem,然后在得到其属性。如果节点是根节点,则可以直接得到根节点的元素和属性的值。根据上图所示,我们要找根节点 Dfile 的元素和属性的值,直接调用。XML 解析脚本Oracle 通过调用 APIxmldom 和 dbms_xmlparser 来做 XML 文件的解析。1 .建立一个 Dir

8、ectory,假如在 EBS 上实现则需要在 EBSDB 的服务器上建立路径如:CreateOrReplaceDirectoryFTP_XXXAs/var/tmp/ftp直接在 APPS 下就可以新建要查找当前建立的 Directory 可以使用 Select*Fromall_directories 查找当前系统中的所有的 Directory.2 .代码如下PatsH:Scilpts.tsLDECLAREp_max_sizeNUMBER:=dbms_lob.lobmaxsize;src_offsetNUMBER:=1;dst_offsetNUMBER:=1;lang_ctxNUMBER:=nl

9、s_charset_id(UTF8);default_csidCONSTANTINTEGER:=nls_charset_id(ZHS16GBK);warningNUMBERl_file_numberPLS_INTEGER:=0;l_countNUMBERl_bfileBFILE;l_clobCLOB;l_commitelementxmldom.domelement;l_parserdbms_xmlparser.parser;l_docdbms_xmldom.domdocument;l_nldbms_xmldom.domnodelist;l_ndbms_xmldom.domnode;rootno

10、dedbms_xmldom.domnode;parent_rootnodedbms_xmldom.domnode;file_lengthNUMBERblock_sizel_rootnode_namel_statusl_recerrcodel_FailCountl_RecCountl_namel_commentsBINARY_INTEGER;VARCHAR2(200);VARCHAR2(1000);VARCHAR2(1000);VARCHAR2(200);VARCHAR2(200);VARCHAR2(1000);VARCHAR2(2000);l_existsBOOLEAN;FUNCTIONcon

11、vertclobtoxmlelement(p_documentRETURNxmldom.domelementISx_commitelementxmldom.domelement;l_parserxmlparser.parser;BEGINl_parser:=xmlparser.newparser;xmlparser.parseclob(l_parser,p_document);x_commitelement:=xmldom.getdocumentelement(xmlparser.getdocument(l_parser);RETURNx_commitelement;ENDconvertclo

12、btoxmlelement;BEGIN- -检查 XML 是否在路径 FTPXXX 下是否存在INCLOB)l_exists,file_length,block_size);l_bfile:=bfilename(FTP_XXX,simanhe_test.xml);- -创建一个 Clobdbms_lob.createtemporary(l_clob,TRUE);dbms_lob.OPEN(l_bfile,dbms_lob.lob_readonly);- -将 XML 文作上载并转威 Clob 类型 dbms_lob.loadclobfromfile(l_clob,l_bfile,p_max_s

13、ize,dst_offset,src_offset,default_csid,-UTF8lang_ctx,-GBKwarning);l_file_number:=dbms_lob.fileexists(l_bfile);IFl_file_number=0THENdbms_output.putline(XML 文件未被转换成功);RETURN;ENDIF;dbms_lob.CLOSE(l_bfile);-Createaparser.l_parser:=dbms_xmlparser.newparser;BEGIN-ParsethedocumentandcreateanewDOMdocument.d

14、bms_xmlparser.parseclob(l_parser,l_clob);EXCEPTIONWHENOTHERSTHENdbms_output.putline(XML 文件不完整);RETURN;END;l_doc:=dbms_xmlparser.getdocument(l_parser);- -FreeresourcesassociatedwiththeCLOBandParsernowtheyarenolongerneeded.dbms_lob.freetemporary(l_clob);- -得到根节点一 rootnode:=xmldom.makenode(xmldom.getdo

15、cumentelement(xmlparser.getdocument(l_parser);l_rootnode_name:=xmldom.getnodename(rootnode);dbms_output.put_line(XML 文件当前的节点名称为|l_rootnode_name);- -得到根节区元素的值dbms_xslprocessor.valueof(rootnode,RecCount/text(),l_RecCount);dbms_xslprocessor.valueof(rootnode,FailCount/text(),l_FailCount);dbms_output.put

16、_line(XML 文件当前的节点名称为|l_rootnode_name|的要素 RecCount,FailCount 值为|l_RecCount|,|l_FailCount);-得至肝节点 Dfile 的属性 Status 的值l_status:=xmldom.getattribute(xmldom.makeelement(rootnode),Status);dbms_output.put_line(XML 文件当前的节点名称为|l_rootnode_name|的属性 Status 的值为|l_status);/*取节点 Item 下各元素的值,先将 Items 节点全部存放在 l_nl 中

17、*/l_nl:=dbms_xmldom.getelementsbytagname(l_doc,Item);l_count:=dbms_xmldom.getlength(l_nl);FORcur_empIN0.dbms_xmldom.getlength(l_nl)-1LOOPl_n:=dbms_xmldom.item(l_nl,cur_emp);- -得到节点 Item 下元素的相dbms_xslprocessor.valueof(l_n,Name/text(),l_name);dbms_xslprocessor.valueof(l_n,Comment/text(),lcomments);- -

18、得到节点 Item 的父节点 FItemparent_rootnode:=dbms_xmldom.getparentnode(l_n);l_rootnode_name:=xmldom.getnodename(parent_rootnode);- -得到节点 FItem 的属性 RecErrCode 而值l_recerrcode:=xmldom.getattribute(xmldom.makeelement(parent_rootnode),RecErrCode);dbms_output.put_line(Name:|l_name|,Comment=|l_comments|,RecErrCode=|l_recerrcode);utl_file.fgetattr(FTP_XXX,simanhe_test.xmlIFNOT

温馨提示

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

评论

0/150

提交评论