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

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

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

    溫馨蟲(chóng)窩

    給自己一個(gè)溫馨的家

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      2 Posts :: 4 Stories :: 2 Comments :: 0 Trackbacks
    在本文中,您會(huì)了解如何將 DOM 結(jié)構(gòu)轉(zhuǎn)換成 SAX 和 JDOM,從而可以與不使用 DOM 的應(yīng)用程序通信。本文列出的代碼演示了如何從 DOM 轉(zhuǎn)換到供 SAX 使用的輸出流,以及如何從 DOM 到 JDOM 的轉(zhuǎn)換。

    如果您對(duì) W3C 的 DOM(文檔對(duì)象模型)感興趣而且認(rèn)為 SAX 很靈巧的話,那么您必須找出一種方法將 DOM 轉(zhuǎn)換成應(yīng)用程序開(kāi)發(fā)人員使用的其它格式。當(dāng)然,這些其它格式是指 SAX 和 JDOM。如果必須將 DOM 作為輸入且要將它轉(zhuǎn)換成其它格式時(shí),要做什么?這當(dāng)然是一個(gè)值得研究的問(wèn)題。由于 DOM 提供了完整的文檔表示,將它轉(zhuǎn)換成另外一種格式當(dāng)然是可行的。在本文中,您將了解如何執(zhí)行從 DOM 到 SAX 或 JDOM 的轉(zhuǎn)換。

    從 DOM 到 SAX
    遺憾的是,DOM 級(jí)別 1 和更新的級(jí)別 2 沒(méi)有提供將 DOM 樹(shù)輸出成 SAX 或其它格式的方式。結(jié)果是每個(gè)語(yǔ)法分析器實(shí)現(xiàn)都提供了一組用于輸出的定制 API,實(shí)現(xiàn)的獨(dú)立性喪失了。換句話說(shuō),您的代碼只能與那個(gè)為它編寫(xiě)的語(yǔ)法分析器一起工作(如 Crimson、Xerces 或 Oracle 等等)。DOM 級(jí)別 3 被認(rèn)為是提供了這項(xiàng)功能,所以我們都必須靜觀 DOM 級(jí)別 3 能提供什么輸出方法。同時(shí),查看一下供應(yīng)商提供的有關(guān)編寫(xiě)或串行化 DOM 樹(shù)的文檔。例如使用 Apache Xerces,需要使用如清單 1 中所示的 org.apache.xml.serialize.XMLSerializer 類。 在每一種情形,您將有可能必須以流的形式輸出 DOM 樹(shù),然后將這個(gè)流交給 SAX 進(jìn)行后續(xù)處理。請(qǐng)注意,清單 1 中僅顯示了以流的形式輸出 DOM 樹(shù);然后可以使用這個(gè)流作為 SAX 處理器的輸入。

    清單 1. 將 DOM 轉(zhuǎn)換成輸出流(供 SAX 使用)
    import org.apache.xerces.parsers.DOMParser;
    import org.apache.xml.serialize.XMLSerializer;
    import org.xml.sax.InputSource;
    import org.w3c.dom.Document;

    public class PrintDOMTree {

    public static void main(String[] args) {
    try {
    InputSource source = new InputSource(args[0]);
    DOMParser parser = new DOMParser();
    parser.parse(source);
    Document doc = parser.getDocument();

    XMLSerializer serializer = new XMLSerializer();
    // Insert your PipedOutputStream here instead of System.out!
    serializer.setOutputByteStream(System.out);
    serializer.serialize(doc);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    }




    從 DOM 到 JDOM
    將 DOM 轉(zhuǎn)換成 JDOM 要比將 DOM 轉(zhuǎn)換成 SAX 簡(jiǎn)單。這事實(shí)上很有意義,因?yàn)槟坏┯辛?DOM 樹(shù),就有可能有機(jī)會(huì)從 SAX 處理數(shù)據(jù)。事實(shí)上,很少有 SAX 最優(yōu)處理 DOM 樹(shù)的情況,因?yàn)槟ㄟ^(guò) DOM 表示來(lái)將 XML 存儲(chǔ)在內(nèi)存里時(shí),已經(jīng)用盡了內(nèi)存。更為常見(jiàn)的工作是把作為 DOM 樹(shù)的 XML 文檔轉(zhuǎn)換成 JDOM 樹(shù)。由于這些格式都是文檔表示,但在行為和功能性方面有潛在的不同,所以您可能想讓其他人用您的 DOM 樹(shù)并將它當(dāng)作 JDOM 進(jìn)行處理。您可能認(rèn)為這是他們的工作,但您需要知道(至少?。┤绾螐哪慕Y(jié)構(gòu)轉(zhuǎn)換成他們的結(jié)構(gòu)。

    對(duì)于將 DOM 轉(zhuǎn)換成 JDOM,JDOM API 向用戶提供了 DOM Node,稱為 org.jdom.input.DOMBuilder。這個(gè)類接受 DOM Document(以及其它一些 DOM 結(jié)構(gòu),如 Element 和 Attr),并將 DOM 樹(shù)轉(zhuǎn)換成 JDOM Document。這個(gè)操作并不復(fù)雜,所以我在清單 2 中簡(jiǎn)單地顯示了該代碼,讓您了解一下實(shí)際過(guò)程。

    清單 2. 將 DOM 轉(zhuǎn)換成 JDOM
    // Java imports
    import java.io.IOException;

    // JDOM imports
    import org.jdom.JDOMException;
    import org.jdom.input.DOMBuilder; 
    import org.jdom.output.XMLOutputter; 

    // SAX and DOM
    import org.xml.sax.InputSource;

    // Xerces
    import org.apache.xerces.parsers.DOMParser;

    public class DOMtoJDOM {

    // DOM tree of input document
    org.w3c.dom.Document domDoc;

    public DOMtoJDOM(String systemID) throws Exception {
    DOMParser parser 
    = new DOMParser();
    parser.parse(
    new InputSource(systemID));
    domDoc 
    = parser.getDocument();
    }


    public org.jdom.Document convert() 
    throws JDOMException, IOException 
    {

    // Create new DOMBuilder, using default parser
    DOMBuilder builder = new DOMBuilder();
    org.jdom.Document jdomDoc 
    = builder.build(domDoc);
    return jdomDoc;
    }


    public static void main(String[] args) {
    try {
    DOMtoJDOM tester 
    = new DOMtoJDOM(args[0]);
    org.jdom.Document jdomDoc 
    = tester.convert();

    // Output the document to System.out
    XMLOutputter outputter = new XMLOutputter();
    outputter.output(jdomDoc, System.
    out);
    }
     catch (Exception e) {
    e.printStackTrace();
    }

    }


    }
     




    沒(méi)有別的要說(shuō)了。一旦您知道如何從 DOM 移向 SAX 和 JDOM 之后,就可以解決任何您需要的輸出格式并且能夠處理您將遇到的許多類型的 XML 表示。靜待 DOM 級(jí)別 3 規(guī)范,以了解對(duì)于以標(biāo)準(zhǔn)的且與供應(yīng)商無(wú)關(guān)的方式輸出 DOM 樹(shù)的更改,到那時(shí),您就可以盡情使用 DOM 了!
    posted on 2005-03-01 14:45 溫馨蟲(chóng)窩 閱讀(177) 評(píng)論(0)  編輯  收藏 所屬分類: XML
    主站蜘蛛池模板: 亚洲性色AV日韩在线观看| 亚洲人妖女同在线播放| 亚洲系列国产精品制服丝袜第| 亚洲偷自拍另类图片二区| 国产成人免费永久播放视频平台| 久久亚洲国产欧洲精品一| 亚洲一区二区三区丝袜| 又色又污又黄无遮挡的免费视| 亚洲国产成AV人天堂无码| 国产精品免费看久久久无码| 两性色午夜视频免费播放| 免费一级做a爰片性色毛片| 久久精品国产免费| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲av女电影网| 中文字幕不卡免费高清视频| 精品亚洲A∨无码一区二区三区| 在线免费观看h片| 中文亚洲成a人片在线观看| 狼色精品人妻在线视频免费| 国产免费女女脚奴视频网| 久久亚洲精品成人777大小说| 欧洲黑大粗无码免费| 亚洲免费观看网站| 亚洲精品无码国产| 日本免费在线中文字幕| 亚洲丁香色婷婷综合欲色啪| 最近免费中文字幕视频高清在线看| 亚洲人和日本人jizz| 亚洲人成无码www久久久| 免费电视剧在线观看| 免费人成毛片动漫在线播放 | 91老湿机福利免费体验| 亚洲午夜免费视频| 免费视频爱爱太爽了| 久久亚洲国产成人影院| 巨胸喷奶水视频www网免费| 亚洲综合在线一区二区三区| 久久久久久a亚洲欧洲AV| 亚洲日韩国产一区二区三区| 永久在线毛片免费观看|