參考至 史帝芬心得筆記
前言 :
在Java的世界裡,要操控XML,最簡單的方法莫過於使用JDOM。在這裡我簡單的介紹如何用JDOM從無到有的建立一分XML、當有一份XML file時,如何將這個XML file讀進程式裡及如何利用JDOM將XML透過XSLT轉成HTML. JDOM是由Brett Mclaughlin和Jason Hunter編寫,在http://www.jdom.org可免費下載。
建立、新增、刪除、輸出 :
範例1展示如何建立、新增、刪除及輸出一份XML,每份XML在JDOM裡是由一個Document類別代表,所以一開始我們要先new一個Document,在建構Document時應指明根節點,如果沒有指明,在建構應由setRootElement設定。基本上XML都可以化成一個樹狀結構,所以,在產生根節點之後,就由根節點開始增加子節點,新增的方式是呼叫Element.addContent將新的節點加入。刪除如果知道是某節點以下的子節點,則可呼叫Element.getChildren取得所有子節點,再找出要刪除的點節予以刪除。
當建立好XML之後,通常我們會希望將它輸出到檔案,JDOM提供了XMLOutputter類別供我們輸出之用,輸出前要先設定編碼方式,不然,會以UTF-8為預設值,setNewlines則是指明輸出時是否要幫我們斷行,方便閱讀,如果沒有加這行指令,預設是不會斷行,那麼所有資料將在同一行上.
讀進一份XML file :
目前XML最常被拿來應用的領域之一大概就是當作設定檔,因此,如何從檔案中讀入一份已存在的XML更為重要. JDOM是利用SAX或DOM來剖析XML,用SAX會比DOM效率好且速度快 (更多比較請參考 這理),所以一般都是用SAX,如果對SAX不熟悉,可以在 http://www.saxproject.org/ 找到相關文件資料.
範例2就是用SAX建立Document,在建立SAXBuilder時傳入的參數指出是否用DTD驗正XML的合法性,true表示要,false表示不要。當呼叫build之後JDOM就已經幫我們用SAX建立好一棵XML Tree,如此我們就可以很方便由Tree中找到我們要的節點.
===== 範例 2 =====
轉換XML到HTML :
要將XML轉成HTML當然要先寫好XSL,但是即使寫好XSL,JDOM也並不提供XML轉換,幸好在JDOM安裝好之後,就會有Apache的Xalan,它可以幫我們做這樣的轉換. 要使用Apache 的 Xalan,首先確定 xalan.jar 在classpath裡。Xalan的第一個用法是在命令列執行,指令如下 :
命令列的用法在一般的運用裡是很方便,但是我們有興趣的是在程式裡怎麼用。範例4提供了一個簡單的sample :
補充說明 :
* Java API for XML Code Samples
前言 :
在Java的世界裡,要操控XML,最簡單的方法莫過於使用JDOM。在這裡我簡單的介紹如何用JDOM從無到有的建立一分XML、當有一份XML file時,如何將這個XML file讀進程式裡及如何利用JDOM將XML透過XSLT轉成HTML. JDOM是由Brett Mclaughlin和Jason Hunter編寫,在http://www.jdom.org可免費下載。
建立、新增、刪除、輸出 :
範例1展示如何建立、新增、刪除及輸出一份XML,每份XML在JDOM裡是由一個Document類別代表,所以一開始我們要先new一個Document,在建構Document時應指明根節點,如果沒有指明,在建構應由setRootElement設定。基本上XML都可以化成一個樹狀結構,所以,在產生根節點之後,就由根節點開始增加子節點,新增的方式是呼叫Element.addContent將新的節點加入。刪除如果知道是某節點以下的子節點,則可呼叫Element.getChildren取得所有子節點,再找出要刪除的點節予以刪除。
當建立好XML之後,通常我們會希望將它輸出到檔案,JDOM提供了XMLOutputter類別供我們輸出之用,輸出前要先設定編碼方式,不然,會以UTF-8為預設值,setNewlines則是指明輸出時是否要幫我們斷行,方便閱讀,如果沒有加這行指令,預設是不會斷行,那麼所有資料將在同一行上.
讀進一份XML file :
目前XML最常被拿來應用的領域之一大概就是當作設定檔,因此,如何從檔案中讀入一份已存在的XML更為重要. JDOM是利用SAX或DOM來剖析XML,用SAX會比DOM效率好且速度快 (更多比較請參考 這理),所以一般都是用SAX,如果對SAX不熟悉,可以在 http://www.saxproject.org/ 找到相關文件資料.
範例2就是用SAX建立Document,在建立SAXBuilder時傳入的參數指出是否用DTD驗正XML的合法性,true表示要,false表示不要。當呼叫build之後JDOM就已經幫我們用SAX建立好一棵XML Tree,如此我們就可以很方便由Tree中找到我們要的節點.
===== 範例 2 =====
- import org.jdom.*;
- import org.jdom.input.*;
- import org.jdom.output.*;
- import java.io.*;
- import java.util.List;
- public class myRead {
- public myRead() {
- Document docJDOM;
- //利用SAX建立Document
- SAXBuilder bSAX = new SAXBuilder(false);
- try {
- docJDOM = bSAX.build(new File("e:/myJDOM.xml"));
- }
- catch (JDOMException e) {
- e.printStackTrace();
- return;
- }
- //在根節點中加入一個新的子節點
- Element elmtRoot = docJDOM.getRootElement();
- Element elmtChapter = new Element("Chapter");
- elmtChapter.setText("驗正XML");
- elmtChapter.setAttribute("sort", "4");
- elmtRoot.addContent(elmtChapter);
- //印出所有根節點的子節點
- List lstChildren = elmtRoot.getChildren("Chapter");
- for(int i=0; i
- Element elmtChild = (Element) lstChildren.get(i);
- System.out.println("Child " + i);
- System.out.println(" Text:" + elmtChild.getText());
- System.out.println(" Attribute:" + elmtChild.getAttributeValue("sort"));
- }
- //輸出到檔案
- OutputXML(docJDOM, "e:/myJDOM2.xml");
- }
- private void OutputXML(Document docXML, String strFilename) {
- XMLOutputter fmt = new XMLOutputter();
- try {
- fmt.setEncoding("big5");
- fmt.setNewlines(true);
- FileWriter fwXML = new FileWriter(strFilename);
- fmt.output(docXML, fwXML);
- fwXML.close();
- }catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- myRead myRead1 = new myRead();
- }
- }
轉換XML到HTML :
要將XML轉成HTML當然要先寫好XSL,但是即使寫好XSL,JDOM也並不提供XML轉換,幸好在JDOM安裝好之後,就會有Apache的Xalan,它可以幫我們做這樣的轉換. 要使用Apache 的 Xalan,首先確定 xalan.jar 在classpath裡。Xalan的第一個用法是在命令列執行,指令如下 :
命令列的用法在一般的運用裡是很方便,但是我們有興趣的是在程式裡怎麼用。範例4提供了一個簡單的sample :
補充說明 :
* Java API for XML Code Samples
This message was edited 8 times. Last update was at 26/08/2011 16:33:32
沒有留言:
張貼留言