• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            JSP與XML的結(jié)合

            綜述:可擴(kuò)展標(biāo)注語言(eXtensible Markup LanguageXML)正被迅速的運(yùn)用于業(yè)界,它已作為與平臺、語言和協(xié)議無關(guān)的格式描述和交換數(shù)據(jù)的廣泛應(yīng)用標(biāo)準(zhǔn)。XML和它的輔助規(guī)范可用于描述數(shù)據(jù)的文檔表現(xiàn),描述XML文檔類型的限制,描述XML文檔和資源之間的鏈接,描述XML文檔的自動轉(zhuǎn)換和格式化。   如何開發(fā)自定義標(biāo)簽庫?

              我使用JSPASP編程已經(jīng)有一段頗長的時間了,在兩種服務(wù)器端的編程方式中,我越來越覺得JSP的功能要強(qiáng)大得多。不提別的,其中JSP的標(biāo)簽庫就是我選擇JSP作為首選服務(wù)器端Web應(yīng)用開發(fā)工具的原因。為什么?因為:維護(hù)和開發(fā)的速度。在一個單一的服務(wù)器頁面中,你可以混合使用各種不同的腳本方法和對象。就?quot;混凝土"一樣,這種混合可令服務(wù)器端的腳本變得強(qiáng)大,并且讓服務(wù)器端的編程者設(shè)計出非常靈活和動態(tài)的Web頁面。不過這種自由的混合也有其缺點(diǎn),那就是維護(hù)起來非常麻煩,特別是當(dāng)項目逐漸變大時。由于最終的產(chǎn)品是經(jīng)由一個傳統(tǒng)的Web設(shè)計者來維護(hù)的,因此會帶來問題。更糟糕的是,隨著代碼的復(fù)雜性增加,開發(fā)的速度就會變慢,不利于開發(fā)中等和大型的Web應(yīng)用,一旦開發(fā)完,站點(diǎn)還要找合格的編程者來維護(hù)這些頗為復(fù)雜的代碼。

            幸好,JSP提供了一個很好解決的辦法。標(biāo)簽庫提供了一個簡單的方法來建立一個可重用的代碼塊。一旦標(biāo)簽庫設(shè)計好,它就可以在許多項目中再次使用。更方便的是,與COMJ2EE不同,你無需學(xué)習(xí)任何其它的技巧就可以建立一個標(biāo)簽庫!只要你懂得寫JSP,你就可以建立一個標(biāo)簽庫。標(biāo)簽庫還可以改善Web應(yīng)用的維護(hù)。這個是得益于JSP頁面自定義標(biāo)簽的簡單XML接口。這樣,Web設(shè)計者甚至可以做到無需知道任何JSP的知識,就可以建立JSPWeb應(yīng)用。這個開放式的Web開發(fā)對于團(tuán)隊運(yùn)作是非常有效的。JSP編程者可以建立自定義的標(biāo)簽和后臺的代碼模塊,而Web設(shè)計者可以使用自定義的標(biāo)簽來建立Web應(yīng)用,并且將精力集中在Web設(shè)計上。

              1. 標(biāo)簽庫的定義

               JSP標(biāo)簽庫(也稱自定義庫)可看成是一套產(chǎn)生基于XML腳本的方法,它經(jīng)由JavaBeans來支持。在概念上說,標(biāo)簽庫是非常簡單和可以重用的代碼構(gòu)造。

            執(zhí)行XML/XSL轉(zhuǎn)換的標(biāo)簽范例和HTML頁面

            <
            @ taglib uri=" http://www.jspinsider.com/jspkit/JAXP " prefix="JAXP">

            c:/xml/example.xml

            c:/xml/example.xsl

              在這個例子中,通過使用簡單的標(biāo)簽來訪問后臺更為強(qiáng)大的代碼,一個XML被裝載,并且通過一個XSL文件來產(chǎn)生一個結(jié)果,并發(fā)送給客戶端,全部通過使用一個簡單的標(biāo)簽調(diào)用就做到了。

               自定義標(biāo)簽為在JSP項目中創(chuàng)建易于重用的代碼打開了一扇大門。你所需要的只是標(biāo)簽庫和它的文檔說明。

              2. 標(biāo)簽的組件

               雖然標(biāo)簽庫非常易于使用,不過要建立一個內(nèi)里的設(shè)計來支持標(biāo)簽庫是頗復(fù)雜的,起碼要比建立一個簡單的JavaBean復(fù)雜。這個復(fù)雜是來自于標(biāo)簽庫是由幾部分構(gòu)成的。不過,你只需要知道JavaJSP的知識就夠了。

            一個簡單的標(biāo)簽由下面的元素構(gòu)成:

               ⑴ JavaBeans:為了得到Java與生具來的面向?qū)ο蟮暮锰帲芍赜玫拇a應(yīng)該放到一個獨(dú)立的代碼容器中。這些JavaBeans并不是標(biāo)簽庫的一部分。不過它是你的代碼庫用來執(zhí)行相關(guān)任務(wù)的基本代碼塊。

              標(biāo)簽處理:這是標(biāo)簽庫的真正核心。一個標(biāo)簽處理器將引用它需要的任何資源(你的JavaBeans)和訪問你的JSP頁面的全部信息(pageContext對象)。JSP頁面也會將所有已經(jīng)被設(shè)置的標(biāo)簽屬性和JSP頁面上的標(biāo)簽體中的內(nèi)容傳送給標(biāo)簽處理器。在標(biāo)簽處理器處理完畢后,它將發(fā)回輸出到你的JSP頁面進(jìn)行處理。

              標(biāo)簽庫的描述(tld文件):這是一個簡單的XML文件,它記錄著標(biāo)簽處理器的屬性、信息和位置。JSP容器通過這個文件來得知從哪里及如何調(diào)用一個標(biāo)簽庫。

              網(wǎng)站的web.xml文件:這是你網(wǎng)站的初始化文件,在這個文件中,你定義了網(wǎng)站中用到的自定義標(biāo)簽,以及哪個tld文件用來描述每個自定義的標(biāo)簽。

              分發(fā)文件(一個WAR或者JAR文件):如果你想重用自定義標(biāo)簽的話,你需要一個方法來將它由一個項目轉(zhuǎn)移到另一個項目中。將標(biāo)簽庫打包為一個JAR文件是一個簡單而且有效的方式。
            在你的JSP文件中作標(biāo)簽庫聲明:很簡單,如果要用到該標(biāo)簽的話,只要在頁面聲明一下就可以,其后,你就可以在該JSP頁面的任何地方使用它。

               看來要做的工作很多,不過其實并不是很難。它的要點(diǎn)并不在于編碼,而是在于如何將各部分正確地組織起來。不過,這樣的分層是很重要的,它可令標(biāo)簽的使用靈活和更容易轉(zhuǎn)移。更重要的是,這些層的存在可讓處理建立標(biāo)簽的工程通過一個JSP IDEJSP的集成開發(fā)環(huán)境)自動完成。期望將來的JSP IDE可自動完成創(chuàng)建一個自定義標(biāo)簽的大部分工作,這樣你只需要寫代碼和標(biāo)簽處理就可以了。

               注意:一個標(biāo)簽處理僅定義一個自定義標(biāo)簽;一個標(biāo)簽庫是幾個處理相同任務(wù)的標(biāo)簽處理器的集合。

              3. 建立自己的標(biāo)簽

               以下將一步一步地教你如何建立自定義的標(biāo)簽,具體的例子是擴(kuò)展JSP,令它擁有自己的HTML編碼功能。這個功能將所有的<>字符用HTML代碼來代替。它可以很容易地擴(kuò)展為做其它的編碼處理。為了簡化,這個例子只解釋了建立自定義標(biāo)簽的基本要素。

              創(chuàng)建一個JavaBean

               你代碼中任何可重新使用的部分都應(yīng)該放到一個JavaBean中。這個很重要,因為你要經(jīng)常在項目的其它地方用到這些代碼。放在標(biāo)簽處理器中的任何代碼在標(biāo)簽外都是不可以重新使用的,因此將可重用的代碼部分獨(dú)立開來是很重要的。在這個例子總,為HTML編碼的邏輯是常用的,因此放到JavaBean中。

               ⑵ HTML編碼JavaBean

            /* HTML_Format.Java */

            public class HTML_Format extends Object implements Java.io.Serializable {

            /**
            創(chuàng)建新的HTML_Format */

            public HTML_Format
            () {}

            /**
            將一個字符串中所有的所有 < > 字符用響應(yīng)的HTML編碼代替 */

            public String HTML_Encode
            String as_data

            {

            int li_len = as_data.length
            ();

            /*string buffer
            的長度要比原來的字符串長*/

            StringBuffer lsb_encode = new StringBuffer
            li_len + li_len/10));

            /*
            循環(huán)替換全部的< > 字符 */
            for
            int li_count = 0 ; li_count < li_len ; li_count++

            { String ls_next = String.valueOf
            as_data.charAtli_count));

            if
            ls_next.equals"<")) ls_next = "<";

            if
            ls_next.equals">")) ls_next = ">";

            lsb_encode.append
            ls_next ;

            }

            return
            lsb_encode.toString() );

            }

            }

              創(chuàng)建一個標(biāo)簽處理器

               標(biāo)簽處理器使用以下的代碼:

            HTML
            編碼標(biāo)簽處理器

            import Java.io.IOException;

            import Javax.servlet.jsp.*;

            import Javax.servlet.jsp.tagext.*;

            public class HTML_FormatTag extends BodyTagSupport

            {

            /* 1}
            在標(biāo)簽?zāi){(diào)用這個函數(shù) */

            public int doEndTag
            () throws JspTagException

            {

            try

            { /* 2}
            得到標(biāo)簽中的文本 */

            BodyContent l_tagbody = getBodyContent
            ();

            String ls_output = "";

            /* 3}
            如果標(biāo)簽體有文本,就處理它 */

            if
            l_tagbody != null

            { HTML_Format l_format = new HTML_Format
            ();

            /* 3a}
            將標(biāo)簽體的內(nèi)容轉(zhuǎn)換為一個字符串 */

            String ls_html_text = l_tagbody.getString
            ();

            ls_output = l_format.HTML_Encode
            ls_html_text;

            }

            /* 4}
            將結(jié)果寫回到數(shù)據(jù)流中 */

            pageContext.getOut
            ().writels_output.trim());

            }

            catch
            IOException e

            { throw new JspTagException
            "Tag Error:" + e.toString());

            }

            /*
            JSP繼續(xù)處理以下頁面的內(nèi)容 */

            return EVAL_PAGE;

            }

            }

              這個處理很簡單,它包括有:

               o 讀入標(biāo)簽開始和結(jié)束間的文本

               o 調(diào)用html編碼函數(shù)

               o 返回結(jié)果到JSP頁面。

              創(chuàng)建一個標(biāo)簽描述器

               需要描述自定義標(biāo)簽以讓系統(tǒng)知道如何處理。該描述文件的后綴為.tld,通常它的名字和標(biāo)簽處理器相同,并存放在"/WEB-INF/"目錄。

            HTML
            編碼標(biāo)簽描述器

            <?xml version="1.0" encoding="UTF-8" ?>

            <!DOCTYPE taglib

            PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
            " http://Java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd ">

            <TAGLIB>

            <TLIBVERSION>1.0</TLIBVERSION>

            <JSPVERSION>1.1</JSPVERSION>

            <SHORTNAME>HTML_FormatTag</SHORTNAME>

            <URI></URI>

            <INFO>HTML Encoding Tag </INFO>

            <TAG>

            <NAME>HTMLEncode</NAME>

            <TAGCLASS>HTML_FormatTag</TAGCLASS>

            <INFO>Encode HTML</INFO>

            </TAG>

            </TAGLIB>

              更新Web XML文件

               現(xiàn)在可告訴JSP容器使用標(biāo)簽庫。為此要修改web.xml文件,具體說來是要在其中加入一個taglib的項目來注冊該標(biāo)簽庫。最重要的是,要為tag分配一個URIURI是一個唯一的引用,只應(yīng)用在該網(wǎng)站的這個特別的標(biāo)簽上。使用全長的URL或者包名是一個好的習(xí)慣,它可以確保唯一性,因為該標(biāo)簽可以在不同的網(wǎng)站使用。這個例子是簡化了。

            修改web.xml文件

            <?xml version="1.0" encoding="ISO-8859-1"?>

            <!DOCTYPE web-app

            PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

            " http://Java.sun.com/j2ee/dtds/web-app_2.2.dtd ">

            <WEB-APP>

            <TAGLIB>

            <TAGLIB-URI>

            HTMLEncode

            </TAGLIB-URI>

            <TAGLIB-LOCATION>

            /WEB-INF/HTML_FormatTag.tld

            </TAGLIB-LOCATION>

            </TAGLIB>

            </WEB-APP>

              使用新的標(biāo)簽

               自定義的標(biāo)簽已經(jīng)設(shè)置好,可以用在一個JSP頁面上。要做到這一點(diǎn),只需在該頁面使用taglib指示命令聲明一下該標(biāo)簽就可以了,該標(biāo)簽通過它唯一的URI被引用,并且會被分配一個名字空間前綴。前綴可以任意,只要它不與其它的名字空間沖突便可。

               在一個JSP頁面上使用HTML編碼標(biāo)簽:

            <
            @ taglib uri="HTMLEncode" prefix="Examples" >

            <PRE>

            <?XML:NAMESPACE PREFIX = Examples /><Examples:HTMLEncode>

            < Hello , Simple sample >

            </Examples:HTMLEncode>
            </PRE>

            范例代碼的輸出

            < Hello , Simple sample >

            which displays as:

            < Hello , Simple sample >

              通過這個標(biāo)簽,我就將該頁面的所有代碼編碼了。有趣的是所有的自定義標(biāo)簽都是在服務(wù)器上處理的。這意味著你將不會在輸出的頁面上看到自定義的標(biāo)簽。

               建立一個標(biāo)簽不是很難吧。最困難的部分是要學(xué)習(xí)標(biāo)簽處理的所有細(xì)節(jié)。這是一個很強(qiáng)大的功能,我們只是提到了最基本的地方。由于這個處理需要幾步,新的JSP編程者在創(chuàng)建標(biāo)簽時將會感到迷惑。

              如何利用JSP開發(fā)DOM應(yīng)用?

              DOMDocument Object Model的縮寫,即文檔對象模型。XML將數(shù)據(jù)組織為一顆樹,所以DOM就是對這顆樹的一個對象描敘。通俗的說,就是通過解析XML文檔,為XML文檔在邏輯上建立一個樹模型,樹的節(jié)點(diǎn)是一個個對象。我們通過存取這些對象就能夠存取XML文檔的內(nèi)容。

               下面我們來看一個簡單的例子,看看在DOM中,我們是如何來操作一個XML文檔的。這是一個XML文檔,也是我們要操作的對象:

            <?xml version="1.0" encoding="UTF-8"?>

            <messages>

            <message>Good-bye serialization, hello Java!</message>

            </messages>

              下面,我們需要把這個文檔的內(nèi)容解析到一個個的Java對象中去供程序使用,利用JAXP,我們只需幾行代碼就能做到這一點(diǎn)。首先,我們需要建立一個解析器工廠,以利用這個工廠來獲得一個具體的解析器對象:

               DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

               我們在這里使用DocumentBuilderFacotry的目的是為了創(chuàng)建與具體解析器無關(guān)的程序,當(dāng)DocumentBuilderFactory類的靜態(tài)方法newInstance()被調(diào)用時,它根據(jù)一個系統(tǒng)變量來決定具體使用哪一個解析器。又因為所有的解析器都服從于JAXP所定義的接口,所以無論具體使用哪一個解析器,代碼都是一樣的。所以當(dāng)在不同的解析器之間進(jìn)行切換時,只需要更改系統(tǒng)變量的值,而不用更改任何代碼。這就是工廠所帶來的好處。

               DocumentBuilder db = dbf.newDocumentBuilder();
            當(dāng)獲得一個工廠對象后,使用它的靜態(tài)方法newDocumentBuilder()方法可以獲得一個DocumentBuilder對象,這個對象代表了具體的DOM解析器。但具體是哪一種解析器,微軟的或者IBM的,對于程序而言并不重要。

               然后,我們就可以利用這個解析器來對XML文檔進(jìn)行解析了:

               Document doc = db.parse("c:/xml/message.xml");

               DocumentBuilderparse()方法接受一個XML文檔名作為輸入?yún)?shù),返回一個Document對象,這個Document對象就代表了一個XML文檔的樹模型。以后所有的對XML文檔的操作,都與解析器無關(guān),直接在這個Document對象上進(jìn)行操作就可以了。而具體對Document操作的方法,就是由DOM所定義的了。

               從得到的Document對象開始,我們就可以開始我們的DOM之旅了。使用Document對象的getElementsByTagName()方法,我們可以得到一個NodeList對象,一個Node對象代表了一個XML文檔中的一個標(biāo)簽元素,而NodeList對象,觀其名而知其意,所代表的是一個Node對象的列表:

               NodeList nl = doc.getElementsByTagName("message");

               我們通過這樣一條語句所得到的是XML文檔中所有<message>標(biāo)簽對應(yīng)的Node對象的

               一個列表。然后,我們可以使用NodeList對象的item()方法來得到列表中的每一個Node對象:

               Node my_node = nl.item(0);

               當(dāng)一個Node對象被建立之后,保存在XML文檔中的數(shù)據(jù)就被提取出來并封裝在這個Node中了。在這個例子中,要提取Message標(biāo)簽內(nèi)的內(nèi)容,我們通常會使用Node對象的getNodeValue()方法:

            String message = my_node.getFirstChild().getNodeValue();

               請注意,這里還使用了一個getFirstChild()方法來獲得message下面的第一個子Node對象。雖然在message標(biāo)簽下面除了文本外并沒有其它子標(biāo)簽或者屬性,但是我們堅持在這里使用getFirseChild()方法,這主要和W3CDOM的定義有關(guān)。W3C把標(biāo)簽內(nèi)的文本部分也定義成一個Node,所以先要得到代表文本的那個Node,我們才能夠使用getNodeValue()來獲取文本的內(nèi)容。現(xiàn)在,既然我們已經(jīng)能夠從XML文件中提取出數(shù)據(jù)了,我們就可以把這些數(shù)據(jù)用在合適的地方,來構(gòu)筑應(yīng)用程序。
            DOM
            實例

              先說說這個例子到底要做的是什么吧,我們在一個名為link.xml文件中保存了一些URL地址,我們希望可以通過DOM把這些URL讀出并顯示出來,也可以反過來向這個XML文件中寫入加入的URL地址。很簡單,卻很實用,也足夠來例示DOM的絕大部分用法了。

               第一個程序我們稱為xmldisplay.Java,主要的功能就是讀取這個XML文件中各個節(jié)點(diǎn)的內(nèi)容,然后在格式化輸出在System.out上,我們來看看這個程序:

            import Javax.xml.parsers.*;

            import org.w3c.dom.*;

              這是引入必要的類,因為在這里使用的是Sun所提供的XML解析器,因而需要引入Java.xml.parsers包,其中包含了有DOM解析器和SAX解析器的具體實現(xiàn)。org.w3c.dom包中定義了w3c所制定的DOM接口。

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder=factory.newDocumentBuilder();

            Document doc=builder.parse("links.xml");

            doc.normalize();

              除了上面講到的,還有一個小技巧,對Document對象調(diào)用normalize(),可以去掉XML文檔中作為格式化內(nèi)容的空白而映射在DOM樹中的不必要的Text Node對象。否則你得到的DOM樹可能并不如你所想象的那樣。特別是在輸出的時候,這個normalize()更為有用。

              NodeList links =doc.getElementsByTagName("link");

              剛才說過,XML文檔中的空白符也會被作為對象映射在DOM樹中。因而,直接調(diào)用Node方法的getChildNodes方法有時候會有些問題,有時不能夠返回所期望的NodeList對象。解決的辦法是使用ElementgetElementByTagName(String),返回的NodeLise就是所期待的對象了。然后,可以用item()方法提取想要的元素。

            for (int i=0;i<links.getLength();i++){

            Element link=(Element) links.item(i);

            System.out.print("Content: ");

            System.out.println(link.getElementsByTagName("text").item(0).getFirstChild();

            .getNodeValue());

            ……

              上面的代碼片斷就完成了對XML文檔內(nèi)容的格式化輸出。只要注意到一些細(xì)節(jié)的問題,比如getFirstChile()方法和getElementsByTagName()方法的使用,這些還是比較容易的。
            下面的內(nèi)容,就是在修改了DOM樹后重新寫入到XML文檔中去的問題了。這個程序名為xmlwrite.Java。在JAXP1.0版本中,并沒有直接的類和方法能夠處理XML文檔的寫入問題,需要借助其它包中的一些輔助類。而在JAXP1.1版本中,引入了對XSLT的支持,所謂XSLT,就是對XML文檔進(jìn)行變換(Translation)后,得到一個新的文檔結(jié)構(gòu)。利用這個新加入的功能,我們就能夠很方便的把新生成或者修改后的DOM樹從新寫回到XML文件中去了,下面我們來看看代碼的實現(xiàn),這段代碼的主要功能是向links.xml文件中加入一個新的link節(jié)點(diǎn):

            import Javax.xml.parsers.*;

            import Javax.xml.transform.*;

            import Javax.xml.transform.dom.DOMSource;

            import Javax.xml.transform.stream.StreamResult;

            import org.w3c.dom.*;

              新引入的Java.xml.transform包中的幾個類,就是用來處理XSLT變換的。

            我們希望在上面的XML文件中加入一個新的link節(jié)點(diǎn),因而首先還是要讀入links.xml文件,構(gòu)建一個DOM樹,然后再對這個DOM樹進(jìn)行修改(添加節(jié)點(diǎn)),最后把修改后的DOM寫回到links.xml文件中:

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder=factory.newDocumentBuilder();

            Document doc=builder.parse("links.xml");

            doc.normalize();

            //---
            取得變量----

            String text="Hanzhong's Homepage";

            String url=" www.hzliu.com ";

            String author="Hzliu Liu";

            String discription="A site from Hanzhong Liu, give u lots of suprise!!!";

              為了看清重點(diǎn),簡化程序,我們把要加入的內(nèi)容硬編碼到記憶String對象中,而實際操作中,往往利用一個界面來提取用戶輸入,或者通過JDBC從數(shù)據(jù)庫中提取想要的內(nèi)容。

            Text textseg;

            Element link=doc.createElement("link");

              首先應(yīng)該明了的是,無論什么類型的NodeText型的也好,Attr型的也好,Element型的也好,它們的創(chuàng)建都是通過Document對象中的createXXX()方法來創(chuàng)建的(XXX代表具體要創(chuàng)建的類型),因此,我們要向XML文檔中添加一個link項目,首先要創(chuàng)建一個link對象:
            Element linktext=doc.createElement("text");

            textseg=doc.createTextNode(text);

            linktext.appendChild(textseg);

            link.appendChild(linktext);

            ……

              創(chuàng)建節(jié)點(diǎn)的過程可能有些千篇一律,但需要注意的地方是,對Element中所包含的text(在DOM中,這些text也是代表了一個Node的,因此也必須為它們創(chuàng)建相應(yīng)的node),不能直接用Element對象的setNodeValue()方法來設(shè)置這些text的內(nèi)容,而需要用創(chuàng)建的Text對象的setNodeValue()方法來設(shè)置文本,這樣才能夠把創(chuàng)建的Element和其文本內(nèi)容添加到DOM樹中。看看前面的代碼,你會更好的理解這一點(diǎn):

            doc.getDocumentElement().appendChild(link);

               最后,不要忘記把創(chuàng)建好的節(jié)點(diǎn)添加到DOM樹中。Document類的getDocumentElement()方法,返回代表文檔根節(jié)點(diǎn)的Element對象。在XML文檔中,根節(jié)點(diǎn)一定是唯一的。

            TransformerFactory tFactory =TransformerFactory.newInstance();

            Transformer transformer = tFactory.newTransformer();

            DOMSource source = new DOMSource(doc);

            StreamResult result = new StreamResult(new Java.io.File("links.xml"));

            transformer.transform(source, result);

              然后就是用XSLTDOM樹輸出了。這里的TransformerFactory也同樣應(yīng)用了工廠模式,使得具體的代碼同具體的變換器無關(guān)。實現(xiàn)的方法和DocumentBuilderFactory相同,這兒就不贅述了。Transformer類的transfrom方法接受兩個參數(shù)、一個數(shù)據(jù)源Source和一個輸出目標(biāo)Result。這里分別使用的是DOMSourceStreamResult,這樣就能夠把DOM的內(nèi)容輸出到一個輸出流中,當(dāng)這個輸出流是一個文件的時候,DOM的內(nèi)容就被寫入到文件中去了。

              如何利用JSP開發(fā)SAX應(yīng)用?

              SAXSimple API for XML的縮寫,它并不是由W3C官方所提出的標(biāo)準(zhǔn),可以說是"民間"的事實標(biāo)準(zhǔn)。實際上,它是一種社區(qū)性質(zhì)的討論產(chǎn)物。雖然如此,在XML中對SAX的應(yīng)用絲毫不比DOM少,幾乎所有的XML解析器都會支持它。

               這樣泛泛的說來或許有些不容易理解,別急,后面的例子會讓你明白SAX的解析過程。看看這個簡單XML文件:

            <POEM>

            <AUTHOR>Ogden Nash</AUTHOR>

             

            posted on 2009-06-16 21:53 肥仔 閱讀(185) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

            久久综合综合久久97色| 免费国产99久久久香蕉| 一本色道久久88综合日韩精品| 久久精品99无色码中文字幕| 97久久国产综合精品女不卡| 99久久精品国产一区二区三区| 综合久久一区二区三区 | 久久综合综合久久97色| 久久久久久极精品久久久| 久久无码专区国产精品发布| 99久久国产综合精品成人影院| 久久精品国产亚洲AV影院| 精品久久久久久无码人妻热| 精品久久久久久成人AV| 国产成人精品综合久久久| 久久久无码精品午夜| 精品综合久久久久久97超人| A级毛片无码久久精品免费| 久久精品国产99久久香蕉| 国产成人精品白浆久久69| 亚洲国产精品无码久久久秋霞2| 精品欧美一区二区三区久久久| 久久久久99精品成人片欧美 | 精品久久久久久久久免费影院| 青青青伊人色综合久久| 国产精品免费福利久久| 久久人妻少妇嫩草AV无码专区| 中文字幕日本人妻久久久免费 | 国产成人精品久久综合| 国产精品成人99久久久久 | 中文国产成人精品久久不卡| 伊人情人综合成人久久网小说| 久久免费大片| 热久久最新网站获取| 亚洲精品97久久中文字幕无码| 久久久网中文字幕| 国产精品久久久久久久久软件| 天天做夜夜做久久做狠狠| 一本色道久久综合狠狠躁篇| 久久久久国产精品人妻| 久久精品毛片免费观看|