本文實例講述了JSP針對XML文件操作技巧。分享給大家供大家參考,具體如下:
XML(Extensible Markup Language)可擴展標記語言,這個基礎(chǔ)知識在早些已經(jīng)學習過。而這篇教程為什么把它放在J2EE下邊呢,因為他也是J2EE的13規(guī)范之一,雖然XML是W3C萬維網(wǎng)組織聯(lián)盟指定的,并做了規(guī)范,所以說也是一種規(guī)范,我們也必須按照規(guī)范來,和JDBC,Servlet,Jsp,Ejb等一樣的。
前邊的文章已經(jīng)介紹了XML的一些基礎(chǔ)知識,主要是用來存儲,傳輸數(shù)據(jù)的,但是這些數(shù)據(jù)我們怎么得到呢,也就是說怎么來解析XML呢?這里總結(jié)一下。
首先解析XML文件一般有兩種方式:DOM解析和SAX解析,首先看一下兩者的概念和基礎(chǔ)知識:
一,原理:
DOM解析:在程序開始執(zhí)行的時候,先將整個XML文件加載到內(nèi)存中,在內(nèi)存中形成一棵DOM樹,然后通過某種編程語言對這顆樹上的任意節(jié)點進行增刪改查操作。
SAX解析:基于事件驅(qū)動型的解析方式。解析是有順序的,順序遵守:從左到右,從上到下。
基于事件驅(qū)動型的解析方式不需要將XML文件全部加載到內(nèi)存中,所以這種方式不會耗費大量的內(nèi)存,
只不過解析過去的節(jié)點不能再次解析,不夠靈活,如果還想解析,只能再次從XML文件頭開始。
二,兩者的優(yōu)缺點:
DOM解析:優(yōu)點:靈活。因為整個樹都在內(nèi)存中,我們隨時隨地都可以對某個節(jié)點操作,解析過去的節(jié)點還可以再次解析,比較靈活。
缺點:如果XML文件很大,則會耗費大量的內(nèi)存,因為這個XML文件很大,而需要訪問
的節(jié)點又很少。
總結(jié): 所以XML文件較小、需要解析的節(jié)點較多,這樣才值得使用DOM解析。
SAX解析:優(yōu)點:不會耗費大量的內(nèi)存。
缺點:不靈活(我們可以使用另外一個技術(shù)XPATH,使用它可以在XML文件中快速定位要
解析的節(jié)點)。
總結(jié):有了XPath技術(shù),SAX解析方式成為我們常用的。
三,在JAVA中,java的JDK提供了關(guān)于XML的解析:org.w3c.dom.*,這是SUN對w3c規(guī)范的實現(xiàn)。但是效率,不夠高。所以我們經(jīng)常使用第三方組件,例如dom4j等,效率相對來說較高一些。
四,好,我們來看一下實例吧:
1,利用JAVA中的JDK提供的,來進行解析讀XML文件:來看兩篇博客寫的很詳細的:Java Dom解析,Java Sax解析。
2,這里寫一下,利用dom4j的解析方法,其實很相同,只不過我感覺dom4j的方法名,屬性名可能更容易使用:
a, 讀XML文件(以下是基于SAX解析方式):
public static void main(String[] args) throws Exception{
//創(chuàng)建SAX解析器對象
SAXReader reader = new SAXReader();
//讀取XML文件
Document document = reader.read(new File("db-config.xml"));
//獲取根元素
Element rootElement = document.getRootElement();
System.out.println("根節(jié)點的名字:" + rootElement.getName());
//獲取根節(jié)點下的子節(jié)點driver
Element driverElement = rootElement.element("driver");
String driver = driverElement.getText();
System.out.println(driver);
//獲取根節(jié)點下的子節(jié)點url
String url = rootElement.elementText("url");
System.out.println(url);
//獲取根節(jié)點下的子節(jié)點user
String user = rootElement.elementText("user");
System.out.println(user);
//獲取根節(jié)點下的子節(jié)點password
String password = rootElement.elementText("password");
System.out.println(password);
}
b,寫文件,就是從上向下的了,我們dom4j中的DOM解析的方式:
public static void main(String[] args) throws Exception{
//在內(nèi)存中先創(chuàng)建一個文檔對象
Document document = DocumentHelper.createDocument();
//構(gòu)造文檔樹
Element stuInfoElement = document.addElement("數(shù)學專業(yè)書籍");
Element stuElement1 = stuInfoElement.addElement("書");
stuElement1.addAttribute("id", "110");
Element nameElement1 = stuElement1.addElement("書名");
nameElement1.setText("近世代數(shù)");
Element stuElement2 = stuInfoElement.addElement("書");
stuElement2.addAttribute("id", "120");
Element nameElement2 = stuElement2.addElement("書名");
nameElement2.setText("高等代數(shù)");
//設(shè)置字符編碼方式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GB18030");
//開始寫入
XMLWriter xmlWriter = new XMLWriter(new FileWriter("students.xml"),format);
xmlWriter.write(document);
xmlWriter.close();
}
最后寫成的文件:
?xml version="1.0" encoding="GB18030"?>
數(shù)學專業(yè)書籍>
書 id="110">
書名>張三/書名>
/書>
書 id="110">
書名>張三/書名>
/書>
/數(shù)學專業(yè)書籍>
綜上,為XML解析的簡單總結(jié),當然實際中會遇到非常復(fù)雜的XML文件,我們可以自己來試著寫這些解析他們的文件,當然也可以使用人家寫好的,這里只是為了多學習,理解它們的本質(zhì)。
希望本文所述對大家JSP程序設(shè)計有所幫助。
您可能感興趣的文章:- jsp+Servlet編程實現(xiàn)驗證碼的方法
- jsp編程獲取當前目錄下的文件和目錄及windows盤符的方法
- jsp編程去除空白行的方法
- jsp編程中session的用法實例分析
- 賣jsp編程技巧的那個垃圾的所有實例的答案全部已收集,現(xiàn)將他人收集的實例答案公布出來,大家鑒賞!
- JSP簡明教程:令人興奮的腳本編程
- 純JSP+DWR實現(xiàn)三級聯(lián)動下拉選擇菜單實現(xiàn)技巧
- jsp 頁面上圖片分行輸出小技巧
- jsp編程常用技巧小結(jié)