使用PLSQL開發(fā)人員如何解析XML文件_第1頁
使用PLSQL開發(fā)人員如何解析XML文件_第2頁
使用PLSQL開發(fā)人員如何解析XML文件_第3頁
使用PLSQL開發(fā)人員如何解析XML文件_第4頁
使用PLSQL開發(fā)人員如何解析XML文件_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、使用PL/SQL如何解析XML學(xué)習(xí)篇-XML文件解析文檔作者:Siman.HeMSN:Simanhe_創(chuàng)建日期:2009-5-22更新日期:2009-5-22文檔編號(hào):DocumentReferenceNumber當(dāng)前版本:Draft1.0文檔控制變更記錄日期作者版本變更說明07/04/08IBM1.03審閱姓名職位分發(fā)拷貝編號(hào)姓名位置/崗位1資料室主管項(xiàng)目資料室2項(xiàng)目組成員34目錄文檔控制 ii概述 4XML 組建 4XML 結(jié)構(gòu)圖 4XML 常用的分析函數(shù) 5XMLParser5XMLDOM5XML 解析實(shí)例 7文件的結(jié)構(gòu) 8解析方案 8XML 解析腳本 9更改歷史 12.概述使用XML文

2、件傳輸數(shù)據(jù), 現(xiàn)在已經(jīng)被越來越多的項(xiàng)目所采納。 其做法通常是用額外開發(fā)的java程序來解析XML數(shù)據(jù)。其實(shí)Oracle已經(jīng)為XML配備了一套功能健全的工具集,1工具集允許PL/SQL和Java開發(fā)人員在Oracle數(shù)據(jù)庫內(nèi)部進(jìn)行工作。本文簡要地概述了XML特性和適用于Oracle數(shù)據(jù)庫的實(shí)用程序,描述如何設(shè)置并使用面向XML的OraclePL/SQL分析程序,然后介紹了一個(gè)實(shí)例程序,該程序分析PL/SQL內(nèi)的XML信息。XML 組建在PL/SQL中利用XML,Oracle提供了幾個(gè)組件,讓開發(fā)人員能輕松地利用XML技術(shù)。這些組件包括:1. XML分析程序。即用來分析、構(gòu)造和驗(yàn)證XML文檔。.2

3、. XPath引擎。它是使用Xpath(XML標(biāo)準(zhǔn)的另一個(gè)元素)說明語法在內(nèi)存中搜索XML文檔的實(shí)用程序。SLT處理器。它在Oracle數(shù)據(jù)庫中支持XSLT,允許您把XML文檔轉(zhuǎn)換成其他格式。3. XMLSQL實(shí)用程序??梢允褂肧QL產(chǎn)生XML文檔,使您可以在Oracle數(shù)據(jù)庫表格中輕松地插入基于XML的數(shù)據(jù)。XSQL頁。一項(xiàng)可以匯集聲明性XML數(shù)據(jù)然后通過XSLT公布這些數(shù)據(jù)的技術(shù)。對(duì)于PL/SQL開發(fā)人員而言,XML分析程序是最重要的組件。通過它,您可以在Oracle數(shù)據(jù)庫中分析、操縱和轉(zhuǎn)換XML文檔。ML分析程序由一套APIs(應(yīng)用程序編程接口)構(gòu)成。XML 結(jié)構(gòu)圖NodeCDATASe

4、ctionComfn&ntXML 常用的分析函數(shù)XMLParser包括分析 XML 文檔所需的數(shù)據(jù)類型和程序。XMLParsingProcess想知道 Oracle 的 parser 是如何調(diào)用 Java 來做解析的,請(qǐng)查看Oracle?XMLDevelopersKitProgrammersGuide10gRelease2(10.2)PartNumberB14252-01網(wǎng)址:http: XML 文檔對(duì)象模型(DOM)元素所需的數(shù)據(jù)類型和程序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 這個(gè)程序包,其實(shí)是通過封裝 Java 程序來解析 XML 的一個(gè) PL/SQL 的包。具體的作用還是要參考 Oracle?DatabasePL/SQLPackagesandTypesReference10gRelease2(10.2)PartNumberB14258-02網(wǎng)址:http:/ 解析實(shí)例案列:XML 文件:simanhe_test.xml畫EIJ4:12_上1:。向1測試 1窖窖生僻字IName測

7、試 2Comment看一看|_|測試 3瞅一瞅Name測試 4Comment試一試Name測試 5Comment爽一爽200文件的結(jié)構(gòu)解析方案在 XMLDOM 的解析過程中,如果想找某個(gè)節(jié)點(diǎn)(Fitem)的屬性(RecErrCode),而該節(jié)點(diǎn)又不是根節(jié)點(diǎn)時(shí),需要從最小的節(jié)點(diǎn)往上找父節(jié)點(diǎn),一直到節(jié)點(diǎn) Fitem,然后在得到其屬性。如果節(jié)點(diǎn)是根節(jié)點(diǎn),則可以直接得到根節(jié)點(diǎn)的元素和屬性的值。根據(jù)上圖所示,我們要找根節(jié)點(diǎn) Dfile 的元素和屬性的值,直接調(diào)用。XML 解析腳本Oracle 通過調(diào)用 APIxmldom 和 dbms_xmlparser 來做 XML 文件的解析。1 .建立一個(gè) Dir

8、ectory,假如在 EBS 上實(shí)現(xiàn)則需要在 EBSDB 的服務(wù)器上建立路徑如:CreateOrReplaceDirectoryFTP_XXXAs/var/tmp/ftp直接在 APPS 下就可以新建要查找當(dāng)前建立的 Directory 可以使用 Select*Fromall_directories 查找當(dāng)前系統(tǒng)中的所有的 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);- -創(chuàng)建一個(gè) Clobdbms_lob.createtemporary(l_clob,TRUE);dbms_lob.OPEN(l_bfile,dbms_lob.lob_readonly);- -將 XML 文作上載并轉(zhuǎn)威 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 文件未被轉(zhuǎn)換成功);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);- -得到根節(jié)點(diǎn)一 rootnode:=xmldom.makenode(xmldom.getdo

15、cumentelement(xmlparser.getdocument(l_parser);l_rootnode_name:=xmldom.getnodename(rootnode);dbms_output.put_line(XML 文件當(dāng)前的節(jié)點(diǎn)名稱為|l_rootnode_name);- -得到根節(jié)區(qū)元素的值dbms_xslprocessor.valueof(rootnode,RecCount/text(),l_RecCount);dbms_xslprocessor.valueof(rootnode,FailCount/text(),l_FailCount);dbms_output.put

16、_line(XML 文件當(dāng)前的節(jié)點(diǎn)名稱為|l_rootnode_name|的要素 RecCount,FailCount 值為|l_RecCount|,|l_FailCount);-得至肝節(jié)點(diǎn) Dfile 的屬性 Status 的值l_status:=xmldom.getattribute(xmldom.makeelement(rootnode),Status);dbms_output.put_line(XML 文件當(dāng)前的節(jié)點(diǎn)名稱為|l_rootnode_name|的屬性 Status 的值為|l_status);/*取節(jié)點(diǎn) Item 下各元素的值,先將 Items 節(jié)點(diǎn)全部存放在 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);- -得到節(jié)點(diǎn) Item 下元素的相dbms_xslprocessor.valueof(l_n,Name/text(),l_name);dbms_xslprocessor.valueof(l_n,Comment/text(),lcomments);- -

18、得到節(jié)點(diǎn) Item 的父節(jié)點(diǎn) FItemparent_rootnode:=dbms_xmldom.getparentnode(l_n);l_rootnode_name:=xmldom.getnodename(parent_rootnode);- -得到節(jié)點(diǎn) 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論