XML寫入 三、通過 SAX 方式生成 XML 文檔

3-1 SAX 生成 XML 的準備工作

1.創建一個TransformerFactory類的對象

SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory .newInstance();

2.通過SAXTransformerFactory對象創建一個TransformerHandler對象

TransformerHandler handler = tff.newTransformerHandler();

3.通過handler對象創建一個Transformer對象

Transformer tr = handler.getTransformer();

4.通過Transformer對象對生成的xml文件進行設置

// 設置xml的編碼

tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

// 設置xml的“是否換行”

tr.setOutputProperty(OutputKeys.INDENT, "yes");

5.創建一個Result對象

File f = new File("src/res/newbooks.xml");

if (!f.exists()) {

f.createNewFile();

}

6.創建Result對象,並且使其與handler關聯

Result result = new StreamResult(new FileOutputStream(f));

handler.setResult(result);

 

3-2  生成子節點及節點屬性

1,打開Document

handler.startDocument();

2,創建屬性對象

AttributesiImpl attr= new AttributesImpl();

3,創建無屬性節點

handler.startElement("","","bookStore",attr);

4,創建有屬性節點

attr.clear();(清除原有屬性內容)

attr.addAttribute("","","id","","1");(設置新的屬性內容)

handler.startElement("","","book",attr);

5,結束節點

handler.endElement("", "","book"); 

handler.endElement("", "","bookStore");

6,結束Document

handler.endDocument();

 

3-3 生成帶文本的子節點

handler.startElement("", "", "bookstore", attr);

for (Book book : bookList) {

attr.clear();

attr.addAttribute("", "", "id", "", book.getId());

handler.startElement("", "", "book", attr);

// 創建name節點

if (book.getName() != null && !book.getName().trim().equals("")) {

attr.clear();

handler.startElement("", "", "name", attr);

handler.characters(book.getName().toCharArray(), 0, book .getName().length());

handler.endElement("", "", "name");

}

...//類似創建name節點(price、language...等等)

handler.endElement("", "", "book");

}

handler.endElement("", "", "bookstore");

// 關閉document

handler.endDocument();

  • setResult()必須在startDocument()之前調用。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章