SAX生成XML文件
准備工作
創建一個SAXTransformerFactory 類對象
//創建一個 SAXTransformerFactory 類對象 SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
通過SAXTransformerFactory 對象創建一個 Transformer 對象
//通過 SAXTransformerFactory 對象創建一個 TransformerHandler 對象 TransformerHandler handler = tff.newTransformerHandler();
設置 xml 文件編碼格式和自動換行
//設置生成的 XML 文件編碼格式 tr.setOutputProperty(OutputKeys.ENCODING, "utf-8"); //設置生成的 XML 文件自動換行 tr.setOutputProperty(OutputKeys.INDENT, "yes");
判斷生成的 xml 文件 是否存在,不存在就創建一個新的
//如果不存在,就創建一個新的 XML 文件 File file = new File("newSchool.xml"); if (!file.exists()) { file.createNewFile(); }
創建一個 Result 對象,並且使其與 TransformerHandler對象關聯
//創建一個Result 對象,並且使其與 TransformerHandler 對象關聯 Result result = new StreamResult(new FileOutputStream(file)); handler.setResult(result);
利用 handler 對象進行 xml 文件內容的編寫
打開 document
//打開 document handler.startDocument();
生成根節點標簽
AttributesImpl atts = new AttributesImpl(); //根節點開始標簽 handler.startElement("", "", "School", atts);
設置字節點的屬性和屬性值 並創建子節點的開始標簽
//設置屬性和屬性值 atts.addAttribute("", "", "id", "", "1"); //子節點開始標簽 handler.startElement("", "", "student", atts);
創建子節點下的 name 節點並給其添加內容
atts.clear(); //清空子節點設的值 //字節點下name節點開始標簽 handler.startElement("", "", "name", atts); String name="小王"; handler.characters(name.toCharArray(), 0, name.length()); //字節點下name節點結束標簽 handler.endElement("", "", "name");
有開始就結束,在 XML 當中標簽都是成對出現的,下面就是結束標簽,以及關閉 document對象
//子節點結束標簽 handler.endElement("", "", "student"); //根節點結束標簽 handler.endElement("", "", "School"); //關閉 document handler.endDocument();
運行結果:
<?xml version="1.0" encoding="utf-8"?><School> <student id="1"> <name>小王</name> </student> </School>
完整代碼:
import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; public class CreateXMLBySAX { public static void main(String[] args) { //創建一個 SAXTransformerFactory 類對象 SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance(); try { //通過 SAXTransformerFactory 對象創建一個 TransformerHandler 對象 TransformerHandler handler = tff.newTransformerHandler(); //通過 TransformerHandler 對象創建一個 Transformer 對象 Transformer tr = handler.getTransformer(); //設置生成的 XML 文件編碼格式 tr.setOutputProperty(OutputKeys.ENCODING, "utf-8"); //設置生成的 XML 文件自動換行 tr.setOutputProperty(OutputKeys.INDENT, "yes"); //如果不存在,就創建一個新的 XML 文件 File file = new File("newSchool.xml"); if (!file.exists()) { file.createNewFile(); } //創建一個Result 對象,並且使其與 TransformerHandler 對象關聯 Result result = new StreamResult(new FileOutputStream(file)); handler.setResult(result); //利用 handler 對象進行 XML 文件內容的編寫 //打開 document handler.startDocument(); //為了創建節點屬性和屬性值 AttributesImpl atts = new AttributesImpl(); //根節點開始標簽 handler.startElement("", "", "School", atts); //atts.clear(); //清空 atts 的值 //設置屬性和屬性值 atts.addAttribute("", "", "id", "", "1"); //子節點開始標簽 handler.startElement("", "", "student", atts); atts.clear(); //清空子節點設的值 //字節點下name節點開始標簽 handler.startElement("", "", "name", atts); String name="小王"; handler.characters(name.toCharArray(), 0, name.length()); //字節點下name節點結束標簽 handler.endElement("", "", "name"); //子節點結束標簽 handler.endElement("", "", "student"); //根節點結束標簽 handler.endElement("", "", "School"); //關閉 document handler.endDocument(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } } }