本文執行個體講述了JSP針對XML檔案操作技巧。分享給大家供大家參考,具體如下:
XML(Extensible Markup Language)可延伸標記語言 (XML),這個基礎知識在早些已經學習過。而這篇教程為什麼把它放在J2EE下邊呢,因為他也是J2EE的13規範之一,雖然XML是W3C全球資訊網組織聯盟指定的,並做了規範,所以說也是一種規範,我們也必須按照規範來,和JDBC,Servlet,Jsp,Ejb等一樣的。
前邊的文章已經介紹了XML的一些基礎知識,主要是用來儲存,傳輸資料的,但是這些資料我們怎麼得到呢,也就是說怎麼來解析XML呢?這裡總結一下。
首先解析XML檔案一般有兩種方式:DOM解析和SAX解析,首先看一下兩者的概念和基礎知識:
一,原理:
DOM解析:在程式開始執行的時候,先將整個XML檔案載入到記憶體中,在記憶體中形成一棵DOM樹,然後通過某種程式設計語言對這顆樹上的任意節點進行增刪改查操作。
SAX解析:基於事件驅動型的解析方式。解析是有順序的,順序遵守:從左至右,從上到下。
基於事件驅動型的解析方式不需要將XML檔案全部載入到記憶體中,所以這種方式不會耗費大量的記憶體,
只不過解析過去的節點不能再次解析,不夠靈活,如果還想解析,只能再次從XML檔案頭開始。
二,兩者的優缺點:
DOM解析:優點:靈活。因為整個樹都在記憶體中,我們隨時隨地都可以對某個節點操作,解析過去的節點還可以再次解析,比較靈活。
缺點:如果XML檔案很大,則會耗費大量的記憶體,因為這個XML檔案很大,而需要訪問
的節點又很少。
總結: 所以XML檔案較小、需要解析的節點較多,這樣才值得使用DOM解析。
SAX解析:優點:不會耗費大量的記憶體。
缺點:不靈活(我們可以使用另外一個技術XPATH,使用它可以在XML檔案中快速定位要
解析的節點)。
總結:有了XPath技術,SAX解析方式成為我們常用的。
三,在JAVA中,java的JDK提供了關於XML的解析:org.w3c.dom.*,這是SUN對w3c規範的實現。但是效率,不夠高。所以我們經常使用第三方組件,例如dom4j等,效率相對來說較高一些。
四,好,我們來看一下執行個體吧:
1,利用JAVA中的JDK提供的,來進行解析讀XML檔案:來看兩篇部落格寫的很詳細的:Java Dom解析,Java Sax解析。
2,這裡寫一下,利用dom4j的解析方法,其實很相同,只不過我感覺dom4j的方法名,屬性名稱可能更容易使用:
a, 讀XML檔案(以下是基於SAX解析方式):
public static void main(String[] args) throws Exception{ //建立SAX解析器對象 SAXReader reader = new SAXReader(); //讀取XML檔案 Document document = reader.read(new File("db-config.xml")); //擷取根項目 Element rootElement = document.getRootElement(); System.out.println("根節點的名字:" + rootElement.getName()); //擷取根節點下的子節點driver Element driverElement = rootElement.element("driver"); String driver = driverElement.getText(); System.out.println(driver); //擷取根節點下的子節點url String url = rootElement.elementText("url"); System.out.println(url); //擷取根節點下的子節點user String user = rootElement.elementText("user"); System.out.println(user); //擷取根節點下的子節點password String password = rootElement.elementText("password"); System.out.println(password); }
b,寫檔案,就是從上向下的了,我們dom4j中的DOM解析的方式:
public static void main(String[] args) throws Exception{ //在記憶體中先建立一個文檔對象 Document document = DocumentHelper.createDocument(); //構造文檔樹 Element stuInfoElement = document.addElement("數學專業書籍"); Element stuElement1 = stuInfoElement.addElement("書"); stuElement1.addAttribute("id", "110"); Element nameElement1 = stuElement1.addElement("書名"); nameElement1.setText("近世代數"); Element stuElement2 = stuInfoElement.addElement("書"); stuElement2.addAttribute("id", "120"); Element nameElement2 = stuElement2.addElement("書名"); nameElement2.setText("高等代數"); //設定字元編碼方式 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"?> <數學專業書籍> <書 id="110"> <書名>張三</書名> </書> <書 id="110"> <書名>張三</書名> </書> </數學專業書籍>
綜上,為XML解析的簡單總結,當然實際中會遇到非常複雜的XML檔案,我們可以自己來試著寫這些解析他們的檔案,當然也可以使用人家寫好的,這裡只是為了多學習,理解它們的本質。
希望本文所述對大家JSP程式設計有所協助。