書名: Java核心技術·卷Ⅱ:高級特性(原書第10版)作者名: (美)凱S.霍斯特曼本章字數: 849字更新時間: 2020-10-30 18:10:53
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()
關閉這個寫出器。
- Learn Blockchain Programming with JavaScript
- JavaScript:Functional Programming for JavaScript Developers
- Python程序設計(第3版)
- 基于Java技術的Web應用開發
- C語言程序設計
- Visual C++數字圖像處理技術詳解
- 名師講壇:Spring實戰開發(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- RISC-V體系結構編程與實踐(第2版)
- Android系統原理及開發要點詳解
- Access 2010中文版項目教程
- 零基礎學C語言程序設計
- R Data Science Essentials
- Python預測分析與機器學習
- Mastering PowerCLI
- Python Automation Cookbook