官术网_书友最值得收藏!

3.7.5 使用StAX寫出XML文檔

在前一節中,你看到了如何通過寫出DOM樹的方法來產生XML文件。如果這個DOM樹沒有其他任何用途,那么這種方式就不是很高效。

StAX API使我們可以直接將XML樹寫出,這需要從某個OutputStream中構建一個XMLStreamWriter,就像下面這樣:

要產生XML文件頭,需要調用

然后調用

添加屬性需要調用

現在,可以通過再次調用writeStartElement添加新的子節點,或者用下面的調用寫出字符:

在寫完所有子節點之后,調用

這會導致當前元素被關閉。

要寫出沒有子節點的元素(例如<img.../>),可以使用下面的調用

最后,在文檔的結尾,調用

這個調用將關閉所有打開的元素。

與使用DOM/XSLT的方式一樣,我們不必擔心屬性值和字符數據中的轉義字符。但是,我們仍舊有可能會產生非良構的XML,例如具有多個根節點的文檔。并且,StAX當前的版本還沒有任何對產生縮進輸出的支持。

程序清單3-10中的程序展示了寫出XML的兩種方式。程序清單3-11和程序清單3-12展示了用于矩形繪畫的窗體類和構件類。

程序清單3-10 write/XMLWriteTest.java

程序清單3-11 write/XMLWriteFrame.java

程序清單3-12 write/RectamgleComponent.java

javax.xml.stream.XMLOutputFactory 6

·static XMLOutputFactory newInstance()

返回XMLOutputFactory類的一個實例。

·XMLStreamWriter createXMLStreamWriter(OutputStream in)

·XMLStreamWriter createXMLStreamWriter(OutputStream in,String characterEncoding)

·XMLStreamWriter createXMLStreamWriter(Writer in)

·XMLStreamWriter createXMLStreamWriter(Result in)

創建寫出到給定流、寫出器或JAXP結果的寫出器。

javax.xml.stream.XMLStreamWriter 6

·void writeStartDocument()

·void writeStartDocument(String xmlVersion)

·void writeStartDocument(String encoding,String xmlVersion)

在文檔的頂部寫入XML處理指令。注意,encoding參數只是用于寫入這個屬性,它不會設置輸出的字符編碼機制。

·void setDefaultNamespace(String namespaceURI)

·void setPrefix(String prefix,String namespaceURI)

設置默認的命名空間,或者具有前綴的命名空間。這種聲明的作用域只是當前元素,如果沒有寫明具體元素,其作用域為文檔的根。

·void writeStartElement(String localName)

·void writeStartElement(String namespaceURI,String localName)

寫出一個開始標簽,其中namespaceURI將用相關聯的前綴來代替。

·void writeEndElement()

關閉當前元素。

·void writeEndDocument()

關閉所有打開的元素。

·void writeEmptyElement(String localName)

·void writeEmptyElement(String namespaceURI,String localName)

寫出一個自閉合的標簽,其中namespaceURI將用相關聯的前綴來代替。

·void writeAttribute(String localName,String value)

·void writeAttribute(String namespaceURI,String localName,String value)

寫出一個用于當前元素的屬性,其中namespaceURI將用相關聯的前綴來代替。

·void writeCharacters(String text)

寫出字符數據。

·void writeCData(String text)

寫出CDATA塊。

·void writeDTD(String dtd)

寫出dtd字符串,該字串需要包含一個DOCTYPE聲明。

·void writeComment(String comment)

寫出一個注釋。

·void close()

關閉這個寫出器。

主站蜘蛛池模板: 隆德县| 宁陕县| 酒泉市| 靖边县| 富锦市| 松原市| 白城市| 临沭县| 沽源县| 榕江县| 老河口市| 墨竹工卡县| 吉木萨尔县| 华坪县| 台前县| 美姑县| 台南市| 韶关市| 彝良县| 乌鲁木齐县| 民权县| 韶关市| 乐昌市| 汶上县| 乡城县| 武隆县| 三明市| 都江堰市| 寻乌县| 鄂尔多斯市| 辽源市| 和龙市| 三台县| 讷河市| 沽源县| 龙里县| 镇江市| 岳阳市| 米林县| 手游| 新民市|