本篇內(nèi)容主要講解“Java與XML聯(lián)合編程的方法是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java與XML聯(lián)合編程的方法是什么”吧!
網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開(kāi)源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺(jué)化效果。
DOM初步
DOM是Document Object Model的縮寫(xiě),即文檔對(duì)象模型。前面說(shuō)過(guò),XML將數(shù)據(jù)組織為一顆樹(shù),所以DOM就是對(duì)這顆樹(shù)的一個(gè)對(duì)象描敘。通俗的說(shuō),就是通過(guò)解析XML文檔,為XML文檔在邏輯上建立一個(gè)樹(shù)模型,樹(shù)的節(jié)點(diǎn)是一個(gè)個(gè)對(duì)象。我們通過(guò)存取這些對(duì)象就能夠存取XML文檔的內(nèi)容。[@more@]下面我們來(lái)看一個(gè)簡(jiǎn)單的例子,看看在DOM中,我們是如何來(lái)操作一個(gè)XML文檔的。
這是一個(gè)XML文檔,也是我們要操作的對(duì)象:
Good-bye serialization, hello Java!
|
下面,我們需要把這個(gè)文檔的內(nèi)容解析到一個(gè)個(gè)的Java對(duì)象中去供程序使用,利用JAXP,我們只需幾行代碼就能做到這一點(diǎn)。首先,我們需要建立一個(gè)解析器工廠,以利用這個(gè)工廠來(lái)獲得一個(gè)具體的解析器對(duì)象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
我們?cè)谶@里使用DocumentBuilderFacotry的目的是為了創(chuàng)建與具體解析器無(wú)關(guān)的程序,當(dāng)DocumentBuilderFactory類的靜態(tài)方法newInstance()被調(diào)用時(shí),它根據(jù)一個(gè)系統(tǒng)變量來(lái)決定具體使用哪一個(gè)解析器。又因?yàn)樗械慕馕銎鞫挤挠贘AXP所定義的接口,所以無(wú)論具體使用哪一個(gè)解析器,代碼都是一樣的。所以當(dāng)在不同的解析器之間進(jìn)行切換時(shí),只需要更改系統(tǒng)變量的值,而不用更改任何代碼。這就是工廠所帶來(lái)的好處。這個(gè)工廠模式的具體實(shí)現(xiàn),可以參看下面的類圖。
DocumentBuilder db = dbf.newDocumentBuilder(); |
當(dāng)獲得一個(gè)工廠對(duì)象后,使用它的靜態(tài)方法newDocumentBuilder()方法可以獲得一個(gè)DocumentBuilder對(duì)象,這個(gè)對(duì)象代表了具體的DOM解析器。但具體是哪一種解析器,微軟的或者IBM的,對(duì)于程序而言并不重要。
然后,我們就可以利用這個(gè)解析器來(lái)對(duì)XML文檔進(jìn)行解析了:
Document doc = db.parse("c:/xml/message.xml"); |
DocumentBuilder的parse()方法接受一個(gè)XML文檔名作為輸入?yún)?shù),返回一個(gè)Document對(duì)象,這個(gè)Document對(duì)象就代表了一個(gè)XML文檔的樹(shù)模型。以后所有的對(duì)XML文檔的操作,都與解析器無(wú)關(guān),直接在這個(gè)Document對(duì)象上進(jìn)行操作就可以了。而具體對(duì)Document操作的方法,就是由DOM所定義的了。
Jaxp支持W3C所推薦的DOM 2。如果你對(duì)DOM很熟悉,那么下面的內(nèi)容就很簡(jiǎn)單了:只需要按照DOM的規(guī)范來(lái)進(jìn)行方法調(diào)用就可以。當(dāng)然,如果你對(duì)DOM不清楚,也不用著急,后面我們會(huì)有詳細(xì)的介紹。在這兒,你所要知道并牢記的是:DOM是用來(lái)描敘XML文檔中的數(shù)據(jù)的模型,引入DOM的全部原因就是為了用這個(gè)模型來(lái)操作XML文檔的中的數(shù)據(jù)。DOM規(guī)范中定義有節(jié)點(diǎn)(即對(duì)象)、屬性和方法,我們通過(guò)這些節(jié)點(diǎn)的存取來(lái)存取XML的數(shù)據(jù)。
從上面得到的Document對(duì)象開(kāi)始,我們就可以開(kāi)始我們的DOM之旅了。使用Document對(duì)象的getElementsByTagName()方法,我們可以得到一個(gè)NodeList對(duì)象,一個(gè)Node對(duì)象代表了一個(gè)XML文檔中的一個(gè)標(biāo)簽元素,而NodeList對(duì)象,觀其名而知其意,所代表的是一個(gè)Node對(duì)象的列表:
NodeList nl = doc.getElementsByTagName("message"); |
我們通過(guò)這樣一條語(yǔ)句所得到的是XML文檔中所有
標(biāo)簽對(duì)應(yīng)的Node對(duì)象的一個(gè)列表。然后,我們可以使用NodeList對(duì)象的item()方法來(lái)得到列表中的每一個(gè)Node對(duì)象:
Node my_node = nl.item(0); |
當(dāng)一個(gè)Node對(duì)象被建立之后,保存在XML文檔中的數(shù)據(jù)就被提取出來(lái)并封裝在這個(gè)Node中了。在這個(gè)例子中,要提取Message標(biāo)簽內(nèi)的內(nèi)容,我們通常會(huì)使用Node對(duì)象的getNodeValue()方法:
String message = my_node.getFirstChild().getNodeValue(); |
請(qǐng)注意,這里還使用了一個(gè)getFirstChild()方法來(lái)獲得message下面的第一個(gè)子Node對(duì)象。雖然在message標(biāo)簽下面除了文本外并沒(méi)有其它子標(biāo)簽或者屬性,但是我們堅(jiān)持在這里使用getFirseChild()方法,這主要和W3C對(duì)DOM的定義有關(guān)。W3C把標(biāo)簽內(nèi)的文本部分也定義成一個(gè)Node,所以先要得到代表文本的那個(gè)Node,我們才能夠使用getNodeValue()來(lái)獲取文本的內(nèi)容。
現(xiàn)在,既然我們已經(jīng)能夠從XML文件中提取出數(shù)據(jù)了,我們就可以把這些數(shù)據(jù)用在合適的地方,來(lái)構(gòu)筑應(yīng)用程序。
下面的內(nèi)容,我們將更多的關(guān)注DOM,為DOM作一個(gè)較為詳細(xì)的解析,使我們使用起來(lái)更為得心應(yīng)手。
DOM詳解
DOM的基本對(duì)象有5個(gè):Document,Node,NodeList,Element和Attr。下面就這些對(duì)象的功能和實(shí)現(xiàn)的方法作一個(gè)大致的介紹。
點(diǎn)擊可放大
Document對(duì)象代表了整個(gè)XML的文檔,所有其它的Node,都以一定的順序包含在Document對(duì)象之內(nèi),排列成一個(gè)樹(shù)形的結(jié)構(gòu),程序員可以通過(guò)遍歷這顆樹(shù)來(lái)得到XML文檔的所有的內(nèi)容,這也是對(duì)XML文檔操作的起點(diǎn)。我們總是先通過(guò)解析XML源文件而得到一個(gè)Document對(duì)象,然后再來(lái)執(zhí)行后續(xù)的操作。此外,Document還包含了創(chuàng)建其它節(jié)點(diǎn)的方法,比如createAttribut()用來(lái)創(chuàng)建一個(gè)Attr對(duì)象。它所包含的主要的方法有:
createAttribute(String):用給定的屬性名創(chuàng)建一個(gè)Attr對(duì)象,并可在其后使用setAttributeNode方法來(lái)放置在某一個(gè)Element對(duì)象上面。
createElement(String):用給定的標(biāo)簽名創(chuàng)建一個(gè)Element對(duì)象,代表XML文檔中的一個(gè)標(biāo)簽,然后就可以在這個(gè)Element對(duì)象上添加屬性或進(jìn)行其它的操作。
createTextNode(String):用給定的字符串創(chuàng)建一個(gè)Text對(duì)象,Text對(duì)象代表了標(biāo)簽或者屬性中所包含的純文本字符串。如果在一個(gè)標(biāo)簽內(nèi)沒(méi)有其它的標(biāo)簽,那么標(biāo)簽內(nèi)的文本所代表的Text對(duì)象是這個(gè)Element對(duì)象的唯一子對(duì)象。
getElementsByTagName(String):返回一個(gè)NodeList對(duì)象,它包含了所有給定標(biāo)簽名字的標(biāo)簽。
getDocumentElement():返回一個(gè)代表這個(gè)DOM樹(shù)的根節(jié)點(diǎn)的Element對(duì)象,也就是代表XML文檔根元素的那個(gè)對(duì)象。
Node對(duì)象是DOM結(jié)構(gòu)中最為基本的對(duì)象,代表了文檔樹(shù)中的一個(gè)抽象的節(jié)點(diǎn)。在實(shí)際使用的時(shí)候,很少會(huì)真正的用到Node這個(gè)對(duì)象,而是用到諸如Element、Attr、Text等Node對(duì)象的子對(duì)象來(lái)操作文檔。Node對(duì)象為這些對(duì)象提供了一個(gè)抽象的、公共的根。雖然在Node對(duì)象中定義了對(duì)其子節(jié)點(diǎn)進(jìn)行存取的方法,但是有一些Node子對(duì)象,比如Text對(duì)象,它并不存在子節(jié)點(diǎn),這一點(diǎn)是要注意的。Node對(duì)象所包含的主要的方法有:
appendChild(org.w3c.dom.Node):為這個(gè)節(jié)點(diǎn)添加一個(gè)子節(jié)點(diǎn),并放在所有子節(jié)點(diǎn)的最后,如果這個(gè)子節(jié)點(diǎn)已經(jīng)存在,則先把它刪掉再添加進(jìn)去。
getFirstChild():如果節(jié)點(diǎn)存在子節(jié)點(diǎn),則返回第一個(gè)子節(jié)點(diǎn),對(duì)等的,還有g(shù)etLastChild()方法返回最后一個(gè)子節(jié)點(diǎn)。
getNextSibling():返回在DOM樹(shù)中這個(gè)節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn),對(duì)等的,還有g(shù)etPreviousSibling()方法返回其前一個(gè)兄弟節(jié)點(diǎn)。
getNodeName():根據(jù)節(jié)點(diǎn)的類型返回節(jié)點(diǎn)的名稱。
getNodeType():返回節(jié)點(diǎn)的類型。
getNodeValue():返回節(jié)點(diǎn)的值。
hasChildNodes():判斷是不是存在有子節(jié)點(diǎn)。
hasAttributes():判斷這個(gè)節(jié)點(diǎn)是否存在有屬性。
getOwnerDocument():返回節(jié)點(diǎn)所處的Document對(duì)象。
insertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在給定的一個(gè)子對(duì)象前再插入一個(gè)子對(duì)象。
removeChild(org.w3c.dom.Node):刪除給定的子節(jié)點(diǎn)對(duì)象。
replaceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一個(gè)新的Node對(duì)象代替給定的子節(jié)點(diǎn)對(duì)象。
NodeList對(duì)象,顧名思義,就是代表了一個(gè)包含了一個(gè)或者多個(gè)Node的列表??梢院?jiǎn)單的把它看成一個(gè)Node的數(shù)組,我們可以通過(guò)方法來(lái)獲得列表中的元素:
GetLength():返回列表的長(zhǎng)度。
Item(int):返回指定位置的Node對(duì)象。
Element對(duì)象代表的是XML文檔中的標(biāo)簽元素,繼承于Node,亦是Node的最主要的子對(duì)象。在標(biāo)簽中可以包含有屬性,因而Element對(duì)象中有存取其屬性的方法,而任何Node中定義的方法,也可以用在Element對(duì)象上面。
getElementsByTagName(String):返回一個(gè)NodeList對(duì)象,它包含了在這個(gè)標(biāo)簽中其下的子孫節(jié)點(diǎn)中具有給定標(biāo)簽名字的標(biāo)簽。
getTagName():返回一個(gè)代表這個(gè)標(biāo)簽名字的字符串。
getAttribute(String):返回標(biāo)簽中給定屬性名稱的屬性的值。在這兒需要主要的是,應(yīng)為XML文檔中允許有實(shí)體屬性出現(xiàn),而這個(gè)方法對(duì)這些實(shí)體屬性并不適用。這時(shí)候需要用到getAttributeNodes()方法來(lái)得到一個(gè)Attr對(duì)象來(lái)進(jìn)行進(jìn)一步的操作。
getAttributeNode(String):返回一個(gè)代表給定屬性名稱的Attr對(duì)象。
Attr對(duì)象代表了某個(gè)標(biāo)簽中的屬性。Attr繼承于Node,但是因?yàn)锳ttr實(shí)際上是包含在Element中的,它并不能被看作是Element的子對(duì)象,因而在DOM中Attr并不是DOM樹(shù)的一部分,所以Node中的getparentNode(),getpreviousSibling()和getnextSibling()返回的都將是null。也就是說(shuō),Attr其實(shí)是被看作包含它的Element對(duì)象的一部分,它并不作為DOM樹(shù)中單獨(dú)的一個(gè)節(jié)點(diǎn)出現(xiàn)。這一點(diǎn)在使用的時(shí)候要同其它的Node子對(duì)象相區(qū)別。
需要說(shuō)明的是,上面所說(shuō)的DOM對(duì)象在DOM中都是用接口定義的,在定義的時(shí)候使用的是與具體語(yǔ)言無(wú)關(guān)的IDL語(yǔ)言來(lái)定義的。因而,DOM其實(shí)可以在任何面向?qū)ο蟮恼Z(yǔ)言中實(shí)現(xiàn),只要它實(shí)現(xiàn)了DOM所定義的接口和功能就可以了。同時(shí),有些方法在DOM中并沒(méi)有定義,是用IDL的屬性來(lái)表達(dá)的,當(dāng)被映射到具體的語(yǔ)言時(shí),這些屬性被映射為相應(yīng)的方法。
有了上面的介紹,相信你對(duì)DOM理解的更多了吧。下面的例子將讓你對(duì)DOM更加熟悉起來(lái)。
先說(shuō)說(shuō)這個(gè)例子到底要做的是什么吧,我們希望在一個(gè)名為link.xml文件中保存了一些URL地址,通過(guò)一個(gè)簡(jiǎn)單的程序,我們可以通過(guò)DOM把這些URL讀出并顯示出來(lái),也可以反過(guò)來(lái)向這個(gè)XML文件中寫(xiě)入加入的URL地址。很簡(jiǎn)單,卻很實(shí)用,也足夠來(lái)例示DOM的絕大部分用法了。
XML文件本身不復(fù)雜,就不給出它的DTD了。link.xml:
JSP Insider http://www.jspinsider.com JSP Insider
2 1 2001
A JSP information site.
The makers of Java http://java.sun.com Sun Microsystems
3 1 2001
Sun Microsystem's website.
The standard JSP container http://jakarta.apache.org Apache Group
4 1 2001
Some great software.
|
第一個(gè)程序我們稱為xmldisplay.java,具體的程序清單可以在附件中找到。主要的功能就是讀取這個(gè)XML文件中各個(gè)節(jié)點(diǎn)的內(nèi)容,然后在格式化輸出在System.out上,我們來(lái)看看這個(gè)程序:
import javax.xml.parsers.*; import org.w3c.dom.*; |
這是引入必要的類,因?yàn)樵谶@里使用的是Sun所提供的XML解析器,因而需要引入java.xml.parsers包,其中包含了有DOM解析器和SAX解析器的具體實(shí)現(xiàn)。org.w3c.dom包中定義了w3c所制定的DOM接口。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc=builder.parse("links.xml"); doc.normalize(); |
除了上面講到的,還有一個(gè)小技巧,對(duì)Document對(duì)象調(diào)用normalize(),可以去掉XML文檔中作為格式化內(nèi)容的空白而映射在DOM樹(shù)中的不必要的Text Node對(duì)象。否則你得到的DOM樹(shù)可能并不如你所想象的那樣。特別是在輸出的時(shí)候,這個(gè)normalize()更為有用。
NodeList links =doc.getElementsByTagName("link"); |
剛才說(shuō)過(guò),XML文檔中的空白符也會(huì)被作為對(duì)象映射在DOM樹(shù)中。因而,直接調(diào)用Node方法的getChildNodes方法有時(shí)候會(huì)有些問(wèn)題,有時(shí)不能夠返回所期望的NodeList對(duì)象。解決的辦法是使用Element的getElementByTagName(String),返回的NodeLise就是所期待的對(duì)象了。然后,可以用item()方法提取想要的元素。
for (int i=0;iElement link=(Element) links.item(i); System.out.print("Content: "); System.out.println(link.getElementsByTagName("text").item(0).getFirstChild().getNodeValue()); System.out.print("URL: "); System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue()); System.out.print("Author: "); System.out.println(link.getElementsByTagName("author").item(0).getFirstChild().getNodeValue()); System.out.print("Date: "); Element linkdate=(Element) link.getElementsByTagName("date").item(0); String day=linkdate.getElementsByTagName("day").item(0).getFirstChild().getNodeValue(); String month=linkdate.getElementsByTagName("month").item(0).getFirstChild().getNodeValue(); String year=linkdate.getElementsByTagName("year").item(0).getFirstChild().getNodeValue(); System.out.println(day+"-"+month+"-"+year); System.out.print("Description: "); System.out.println(link.getElementsByTagName("description").item(0).getFirstChild().getNodeValue()); System.out.println(); } |
上面的代碼片斷就完成了對(duì)XML文檔內(nèi)容的格式化輸出。只要注意到一些細(xì)節(jié)的問(wèn)題,比如getFirstChile()方法和getElementsByTagName()方法的使用,這些還是比較容易的。
下面的內(nèi)容,就是在修改了DOM樹(shù)后重新寫(xiě)入到XML文檔中去的問(wèn)題了。這個(gè)程序名為xmlwrite.java。在JAXP1.0版本中,并沒(méi)有直接的類和方法能夠處理XML文檔的寫(xiě)入問(wèn)題,需要借助其它包中的一些輔助類。而在JAXP1.1版本中,引入了對(duì)XSLT的支持,所謂XSLT,就是對(duì)XML文檔進(jìn)行變換(Translation)后,得到一個(gè)新的文檔結(jié)構(gòu)。利用這個(gè)新加入的功能,我們就能夠很方便的把新生成或者修改后的DOM樹(shù)從新寫(xiě)回到XML文件中去了,下面我們來(lái)看看代碼的實(shí)現(xiàn),這段代碼的主要功能是向links.xml文件中加入一個(gè)新的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包中的幾個(gè)類,就是用來(lái)處理XSLT變換的。
我們希望在上面的XML文件中加入一個(gè)新的link節(jié)點(diǎn),因而首先還是要讀入links.xml文件,構(gòu)建一個(gè)DOM樹(shù),然后再對(duì)這個(gè)DOM樹(shù)進(jìn)行修改(添加節(jié)點(diǎn)),最后把修改后的DOM寫(xiě)回到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),簡(jiǎn)化程序,我們把要加入的內(nèi)容硬編碼到記憶String對(duì)象中,而實(shí)際操作中,往往利用一個(gè)界面來(lái)提取用戶輸入,或者通過(guò)JDBC從數(shù)據(jù)庫(kù)中提取想要的內(nèi)容。
Text textseg; Element link=doc.createElement("link"); |
首先應(yīng)該明了的是,無(wú)論什么類型的Node,Text型的也好,Attr型的也好,Element型的也好,它們的創(chuàng)建都是通過(guò)Document對(duì)象中的createXXX()方法來(lái)創(chuàng)建的(XXX代表具體要?jiǎng)?chuàng)建的類型),因此,我們要向XML文檔中添加一個(gè)link項(xiàng)目,首先要?jiǎng)?chuàng)建一個(gè)link對(duì)象:
Element linktext=doc.createElement("text"); textseg=doc.createTextNode(text); linktext.appendChild(textseg); link.appendChild(linktext); Element linkurl=doc.createElement("url"); textseg=doc.createTextNode(url); linkurl.appendChild(textseg); link.appendChild(linkurl); Element linkauthor=doc.createElement("author"); textseg=doc.createTextNode(author); linkauthor.appendChild(textseg); link.appendChild(linkauthor); java.util.Calendar rightNow = java.util.Calendar.getInstance(); String day=Integer.toString(rightNow.get(java.util.Calendar.DAY_OF_MONTH)); String month=Integer.toString(rightNow.get(java.util.Calendar.MONTH)); String year=Integer.toString(rightNow.get(java.util.Calendar.YEAR)); Element linkdate=doc.createElement("date"); Element linkdateday=doc.createElement("day"); textseg=doc.createTextNode(day); linkdateday.appendChild(textseg); Element linkdatemonth=doc.createElement("month"); textseg=doc.createTextNode(month); linkdatemonth.appendChild(textseg); Element linkdateyear=doc.createElement("year"); textseg=doc.createTextNode(year); linkdateyear.appendChild(textseg); linkdate.appendChild(linkdateday); linkdate.appendChild(linkdatemonth); linkdate.appendChild(linkdateyear); link.appendChild(linkdate); Element linkdiscription=doc.createElement("description"); textseg=doc.createTextNode(discription); linkdiscription.appendChild(textseg); link.appendChild(linkdiscription); |
創(chuàng)建節(jié)點(diǎn)的過(guò)程可能有些千篇一律,但需要注意的地方是,對(duì)Element中所包含的text(在DOM中,這些text也是代表了一個(gè)Node的,因此也必須為它們創(chuàng)建相應(yīng)的node),不能直接用Element對(duì)象的setNodeValue()方法來(lái)設(shè)置這些text的內(nèi)容,而需要用創(chuàng)建的Text對(duì)象的setNodeValue()方法來(lái)設(shè)置文本,這樣才能夠把創(chuàng)建的Element和其文本內(nèi)容添加到DOM樹(shù)中??纯辞懊娴拇a,你會(huì)更好的理解這一點(diǎn):
doc.getDocumentElement().appendChild(link); |
最后,不要忘記把創(chuàng)建好的節(jié)點(diǎn)添加到DOM樹(shù)中。Document類的getDocumentElement()方法,返回代表文檔根節(jié)點(diǎn)的Element對(duì)象。在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); |
然后就是用XSLT把DOM樹(shù)輸出了。這里的TransformerFactory也同樣應(yīng)用了工廠模式,使得具體的代碼同具體的變換器無(wú)關(guān)。實(shí)現(xiàn)的方法和DocumentBuilderFactory相同,這兒就不贅述了。Transformer類的transfrom方法接受兩個(gè)參數(shù)、一個(gè)數(shù)據(jù)源Source和一個(gè)輸出目標(biāo)Result。這里分別使用的是DOMSource和StreamResult,這樣就能夠把DOM的內(nèi)容輸出到一個(gè)輸出流中,當(dāng)這個(gè)輸出流是一個(gè)文件的時(shí)候,DOM的內(nèi)容就被寫(xiě)入到文件中去了。
到此,相信大家對(duì)“Java與XML聯(lián)合編程的方法是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)站名稱:Java與XML聯(lián)合編程的方法是什么
標(biāo)題網(wǎng)址:
http://weahome.cn/article/jhsdhd.html