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()之前調用。