<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 56,  comments - 12,  trackbacks - 0
    一、JDOM 簡介
    JDOM是一個開源項目,它基于樹型結構,利用純JAVA的技術對XML文檔實現解析、生成、序列化以及多種操作。
    JDOM 直接為JAVA編程服務。它利用更為強有力的JAVA語言的諸多特性(方法重載、集合概念以及映射),把SAX和DOM的功能有效地結合起來。
    在使用設計上盡可能地隱藏原來使用XML過程中的復雜性。利用JDOM處理XML文檔將是一件輕松、簡單的事。
    JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter開發出來,以彌補DOM及SAX在實際應用當中的不足之處。
    這些不足之處主要在于SAX沒有文檔修改、隨機訪問以及輸出的功能,而對于DOM來說,JAVA程序員在使用時來用起來總覺得不太方便。
    DOM 的缺點主要是來自于由于Dom是一個接口定義語言(IDL),它的任務是在不同語言實現中的一個最低的通用標準,并不是為JAVA特別設計的。JDOM的 最新版本為JDOM Beta 9。最近JDOM被收錄到JSR-102內,這標志著JDOM成為了JAVA平臺組成的一部分。


    二、JDOM 包概覽
    JDOM是由以下幾個包組成的
    org.JDOM
    org.JDOM.input
    org.JDOM.output
    org.JDOM.adapters
    org.JDOM.transform

    三、JDOM 類說明

    org.JDOM
    這個包里的類是你解析xml文件后所要用到的所有數據類型。
    Attribute
    CDATA
    Coment
    DocType
    Document
    Element
    EntityRef
    Namespace
    ProscessingInstruction
    Text

    org.JDOM.transform
    在涉及xslt格式轉換時應使用下面的2個類
    JDOMSource
    JDOMResult

    org.JDOM.input
    輸入類,一般用于文檔的創建工作
    SAXBuilder
    DOMBuilder
    ResultSetBuilder

    org.JDOM.output
    輸出類,用于文檔轉換輸出
    XMLOutputter
    SAXOutputter
    DomOutputter
    JTreeOutputter

    使用前注意事項:
    1.JDOM對于JAXP 以及 TRax 的支持
    JDOM 支持JAXP1.1:你可以在程序中使用任何的parser工具類,默認情況下是JAXP的parser。
    制定特別的parser可用如下形式
    SAXBuilder parser 
    = new SAXBuilder("org.apache.crimson.parser.XMLReaderImpl");
    Document doc = parser.build("http://www.cafeconleche.org/");
    // work with the ..
    JDOM也支持TRaX:XSLT可通過JDOMSource以及JDOMResult類來轉換(參見以后章節)
    2.注意在JDOM里文檔(Document)類由org.JDOM.Document 來表示。這要與org.w3c.dom中的Document區別開,這2種格式如何轉換在后面會說明。
    以下如無特指均指JDOM里的Document。


    四、JDOM主要使用方法
    1.Ducument類
    (1)Document的操作方法:
    Element root = new Element("GREETING");
    Document doc = new Document(root);
    root.setText("Hello JDOM!");
    或者簡單的使用Document doc = new Document(new Element("GREETING").setText("Hello JDOM!t"));

    這點和DOM不同。Dom則需要更為復雜的代碼,如下:
    DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
    DocumentBuilder builder =factory.newDocumentBuilder();
    Document doc = builder.newDocument();
    Element root =doc.createElement("root");
    Text text = doc.createText("This is the root");
    root.appendChild(text);
    doc.appendChild(root);


    注意事項:JDOM不允許同一個節點同時被2個或多個文檔相關聯,要在第2個文檔中使用原來老文檔中的節點的話。首先需要使用detach()把這個節點分開來。

    (2)從文件、流、系統ID、URL得到Document對象:
    DOMBuilder builder = new DOMBuilder();
    Document doc = builder.build(new File("jdom_test.xml"));

    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build(url);
    在新版本中DOMBuilder 已經Deprecated掉 DOMBuilder.builder(url),用SAX效率會比較快。

    這里舉一個小例子,為了簡單起見,使用String對象直接作為xml數據源:

    public jdomTest() {
      String textXml = null;
      textXml = "<note>";
      textXml = textXml +
        "<to>aaa</to><from>bbb</from><heading>ccc</heading><body>ddd</body>";
      textXml = textXml + "</note>";
      SAXBuilder builder = new SAXBuilder();
      Document doc = null;
      Reader in= new StringReader(textXml);
      try {
        doc = builder.build(in);
        Element root = doc.getRootElement();
        List ls = root.getChildren();//注意此處取出的是root節點下面的一層的Element集合
        for (Iterator iter = ls.iterator(); iter.hasNext(); ) {
        Element el = (Element) iter.next();
        if(el.getName().equals("to")){
          System.out.println(el.getText());
        }
        }
      }
      catch (IOException ex) {
        ex.printStackTrace();
      }
      catch (JDOMException ex) {
        ex.printStackTrace();
      }
    }

    很簡單把。


    (3)DOM的document和JDOM的Document之間的相互轉換使用方法,簡單!
    DOMBuilder builder = new DOMBuilder();
    org.jdom.Document jdomDocument = builder.build(domDocument);
    // work with the JDOM document…

    DOMOutputter converter = new DOMOutputter();
    org.w3c.dom.Document domDocument = converter.output(jdomDocument);
    // work with the DOM document…

    2.XML文檔輸出
    XMLOutPutter類:
    JDOM的輸出非常靈活,支持很多種io格式以及風格的輸出
    Document doc = new Document(...);
    XMLOutputter outp = new XMLOutputter();
    // Raw output
    outp.output(doc, fileOutputStream);
    // Compressed output
    outp.setTextTrim(true);
    outp.output(doc, socket.getOutputStream());
    // Pretty output
    outp.setIndent(" ");
    outp.setNewlines(true);
    outp.output(doc, System.out);
    ......
    詳細請參閱最新的JDOM API手冊


    3.Element 類:
    (1)瀏覽Element樹
    //獲得根元素element
    Element root = doc.getRootElement();
    // 獲得所有子元素的一個list
    List allChildren = root.getChildren();
    // 獲得指定名稱子元素的list
    List namedChildren = root.getChildren("name");
    //獲得指定名稱的第一個子元素
    Element child = root.getChild("name");
    (這里的List是java.util.List)

    JDOM給了我們很多很靈活的使用方法來管理子元素
    List allChildren = root.getChildren();
    // 刪除第四個子元素
    allChildren.remove(3);
    // 刪除叫“jack”的子元素
    allChildren.removeAll(root.getChildren("jack"));

    root.removeChildren("jack"); // 便捷寫法
    // 加入
    allChildren.add(new Element("jane"));

    root.addContent(new Element("jane")); // 便捷寫法
    allChildren.add(0, new Element("first"));


    (2)移動Elements:
    在JDOM里很簡單
    Element movable = new Element("movable");
    parent1.addContent(movable); // place
    parent1.removeContent(movable); // remove
    parent2.addContent(movable); // add

    在Dom里
    Element movable = doc1.createElement("movable");
    parent1.appendChild(movable); // place
    parent1.removeChild(movable); // remove
    parent2.appendChild(movable); // 出錯!

    補充:
    糾錯性
    JDOM的Element構造函數(以及它的其他函數)會檢查element是否合法。
    而它的add/remove方法會檢查樹結構,檢查內容如下:
    1.在任何樹中是否有回環節點
    2.是否只有一個根節點
    3.是否有一致的命名空間(Namespaces)



    (3)Element的text內容讀取
    <deion>
    A cool demo
    </deion>

    // The text is directly available
    // Returns "\n A cool demo\n"
    String desc = element.getText();

    // There's a convenient shortcut
    // Returns "A cool demo"
    String desc = element.getTextTrim();

    (4)Elment內容修改
    element.setText("A new deion");
    3.可正確解釋特殊字符
    element.setText("<xml> content");
    4.CDATA的數據寫入、讀出
    element.addContent(new CDATA("<xml> content"));
    String noDifference = element.getText();

    混合內容
    element可能包含很多種內容,比如說

    <table>
    <!-- Some comment -->
    Some text
    <tr>Some child element</tr>
    </table>

    取table的子元素tr
    String text = table.getTextTrim();
    Element tr = table.getChild("tr");

    也可使用另外一個比較簡單的方法
    List mixedCo = table.getContent();
    Iterator itr = mixedCo.iterator();
    while (itr.hasNext()) {
    Object o = i.next();
    if (o instanceof Comment) {
    ...
    }
    // 這里可以寫成Comment, Element, Text, CDATA,ProcessingInstruction, 或者是EntityRef的類型
    }
    // 現在移除Comment,注意這里游標應為1。這是由于回車鍵也被解析成Text類的緣故,所以Comment項應為1。
    mixedCo.remove(1);



    4.Attribute類
    <table width="100%" border="0"> </table>
    //獲得attribute
    String width = table.getAttribute("width");
    int border = table.getAttribute("width").getInt();
    //設置attribute
    table.setAttribute("vspace", "0");
    // 刪除一個或全部attribute
    table.removeAttribute("vspace");
    table.getAttributes().clear();



    5.處理指令(Processing Instructions)操作
    一個Pls的例子
    <?br?>
    <?cocoon-process type="xslt"?>
          |     |
          |     |
        目標   數據

    處理目標名稱(Target)
    String target = pi.getTarget();
    獲得所有數據(data),在目標(target)以后的所有數據都會被返回。
    String data = pi.getData();
    獲得指定屬性的數據
    String type = pi.get("type");
    獲得所有屬性的名稱
    List ls = pi.getNames();

    6.命名空間操作
    <xhtml:html 
    xmlns:xhtml="http://www.w3.org/1999/xhtml">
    <xhtml:title>Home Page</xhtml:title>
    </xhtml:html>

    Namespace xhtml = Namespace.getNamespace("xhtml", "http://www.w3.org/1999/xhtml");
    List kids = html.getChildren("title", xhtml);
    Element kid = html.getChild("title", xhtml);
    kid.addContent(new Element("table", xhtml));

    7.XSLT格式轉換
    使用以下函數可對XSLT轉換
    最后如果你需要使用w3c的Document則需要轉換一下。
    public static Document transform(String stylesheet,Document in)
                              throws JDOMException {
      try {
        Transformer transformer = TransformerFactory.newInstance()
                      .newTransformer(new StreamSource(stylesheet));
        JDOMResult out = new JDOMResult();
        transformer.transform(new JDOMSource(in), out);
        return out.getDeocument();
      }
      catch (TransformerException e) {
        throw new JDOMException("XSLT Trandformation failed", e);
      }
      }

    參考書目:

    1.JDOM官方網站: http://www.jdom.org

    2.<<Processing XML with Java>> Elliotte Rusty Harold 2002

    3.JDOM API Documentation

    4.<<JDOM Makes XML Easy>>Jason Hunter Co-Creator JDOM Project

    5.WSDP Tutorial
    posted on 2007-01-19 00:01 苦笑枯 閱讀(328) 評論(0)  編輯  收藏 所屬分類: Java
    收藏來自互聯網,僅供學習。若有侵權,請與我聯系!

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(2)

    隨筆分類(56)

    隨筆檔案(56)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产免费69成人精品视频| 在线精品免费视频| 久久精品国产精品亚洲艾 | 亚洲黄片手机免费观看| 亚洲爆乳成av人在线视菜奈实| 最近中文字幕mv手机免费高清 | 国产精品亚洲а∨无码播放麻豆| 在线免费观看色片| 国产亚洲男人的天堂在线观看| 日本免费人成黄页在线观看视频| 午夜亚洲WWW湿好爽| 日韩成人免费aa在线看| 无套内射无矿码免费看黄| 久久久青草青青国产亚洲免观 | 亚洲av无码专区青青草原| 免费看大美女大黄大色 | 久久免费福利视频| 亚洲韩国在线一卡二卡| 成年女人18级毛片毛片免费观看| 亚洲人成未满十八禁网站 | 亚洲AV无码久久| 99re免费在线视频| 亚洲中文无码永久免费| 免费在线观看日韩| 国产精品免费一区二区三区四区| 亚洲精品视频观看| 国产真人无遮挡作爱免费视频 | 亚洲国产av无码精品| 你懂的在线免费观看| 亚洲美女视频网址| 在线观看免费精品国产| 中文字幕免费视频精品一| 亚洲沟沟美女亚洲沟沟| 国产一级高清视频免费看| 亚洲精品无码专区在线| 久章草在线精品视频免费观看| 久久久久久亚洲AV无码专区| 在线看片无码永久免费视频| 免费福利在线观看| 亚洲日韩在线视频| 免费在线一级毛片|