Java——SAX生成XML文件
SAX生成XML文件?
準(zhǔn)備工作
創(chuàng)建一個(gè)SAXTransformerFactory 類對(duì)象
//創(chuàng)建一個(gè) SAXTransformerFactory 類對(duì)象 SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();通過(guò)SAXTransformerFactory 對(duì)象創(chuàng)建一個(gè) Transformer 對(duì)象
//通過(guò) SAXTransformerFactory 對(duì)象創(chuàng)建一個(gè) TransformerHandler 對(duì)象 TransformerHandler handler = tff.newTransformerHandler();設(shè)置 xml 文件編碼格式和自動(dòng)換行
//設(shè)置生成的 XML 文件編碼格式 tr.setOutputProperty(OutputKeys.ENCODING, "utf-8"); //設(shè)置生成的 XML 文件自動(dòng)換行 tr.setOutputProperty(OutputKeys.INDENT, "yes");?判斷生成的?xml?文件?是否存在,不存在就創(chuàng)建一個(gè)新的
//如果不存在,就創(chuàng)建一個(gè)新的 XML 文件 File file = new File("newSchool.xml"); if (!file.exists()) {file.createNewFile(); }?
創(chuàng)建一個(gè) Result 對(duì)象,并且使其與 TransformerHandler對(duì)象關(guān)聯(lián)
//創(chuàng)建一個(gè)Result 對(duì)象,并且使其與 TransformerHandler 對(duì)象關(guān)聯(lián) Result result = new StreamResult(new FileOutputStream(file)); handler.setResult(result);?
?
?
利用 handler 對(duì)象進(jìn)行 xml 文件內(nèi)容的編寫
打開 document
//打開 document handler.startDocument();生成根節(jié)點(diǎn)標(biāo)簽
AttributesImpl atts = new AttributesImpl(); //根節(jié)點(diǎn)開始標(biāo)簽 handler.startElement("", "", "School", atts);設(shè)置字節(jié)點(diǎn)的屬性和屬性值 并創(chuàng)建子節(jié)點(diǎn)的開始標(biāo)簽
//設(shè)置屬性和屬性值 atts.addAttribute("", "", "id", "", "1"); //子節(jié)點(diǎn)開始標(biāo)簽 handler.startElement("", "", "student", atts);?
創(chuàng)建子節(jié)點(diǎn)下的 name 節(jié)點(diǎn)并給其添加內(nèi)容
atts.clear(); //清空子節(jié)點(diǎn)設(shè)的值 //字節(jié)點(diǎn)下name節(jié)點(diǎn)開始標(biāo)簽 handler.startElement("", "", "name", atts); String name="小王"; handler.characters(name.toCharArray(), 0, name.length()); //字節(jié)點(diǎn)下name節(jié)點(diǎn)結(jié)束標(biāo)簽 handler.endElement("", "", "name");?
有開始就結(jié)束,在 XML 當(dāng)中標(biāo)簽都是成對(duì)出現(xiàn)的,下面就是結(jié)束標(biāo)簽,以及關(guān)閉 document對(duì)象
//子節(jié)點(diǎn)結(jié)束標(biāo)簽 handler.endElement("", "", "student");//根節(jié)點(diǎn)結(jié)束標(biāo)簽 handler.endElement("", "", "School");//關(guān)閉 document handler.endDocument();?
運(yùn)行結(jié)果:
<?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) {//創(chuàng)建一個(gè) SAXTransformerFactory 類對(duì)象SAXTransformerFactory tff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();try {//通過(guò) SAXTransformerFactory 對(duì)象創(chuàng)建一個(gè) TransformerHandler 對(duì)象TransformerHandler handler = tff.newTransformerHandler();//通過(guò) TransformerHandler 對(duì)象創(chuàng)建一個(gè) Transformer 對(duì)象Transformer tr = handler.getTransformer();//設(shè)置生成的 XML 文件編碼格式tr.setOutputProperty(OutputKeys.ENCODING, "utf-8");//設(shè)置生成的 XML 文件自動(dòng)換行tr.setOutputProperty(OutputKeys.INDENT, "yes");//如果不存在,就創(chuàng)建一個(gè)新的 XML 文件File file = new File("newSchool.xml");if (!file.exists()) {file.createNewFile();}//創(chuàng)建一個(gè)Result 對(duì)象,并且使其與 TransformerHandler 對(duì)象關(guān)聯(lián)Result result = new StreamResult(new FileOutputStream(file));handler.setResult(result);//利用 handler 對(duì)象進(jìn)行 XML 文件內(nèi)容的編寫//打開 document handler.startDocument();//為了創(chuàng)建節(jié)點(diǎn)屬性和屬性值AttributesImpl atts = new AttributesImpl();//根節(jié)點(diǎn)開始標(biāo)簽handler.startElement("", "", "School", atts);//atts.clear(); //清空 atts 的值//設(shè)置屬性和屬性值atts.addAttribute("", "", "id", "", "1");//子節(jié)點(diǎn)開始標(biāo)簽handler.startElement("", "", "student", atts);atts.clear(); //清空子節(jié)點(diǎn)設(shè)的值//字節(jié)點(diǎn)下name節(jié)點(diǎn)開始標(biāo)簽handler.startElement("", "", "name", atts);String name="小王";handler.characters(name.toCharArray(), 0, name.length());//字節(jié)點(diǎn)下name節(jié)點(diǎn)結(jié)束標(biāo)簽handler.endElement("", "", "name");//子節(jié)點(diǎn)結(jié)束標(biāo)簽handler.endElement("", "", "student");//根節(jié)點(diǎn)結(jié)束標(biāo)簽handler.endElement("", "", "School");//關(guān)閉 document handler.endDocument();} catch (TransformerConfigurationException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();}} }?
轉(zhuǎn)載于:https://www.cnblogs.com/szj-ang/p/7492618.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Java——SAX生成XML文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: numpy的array合并-【老鱼学nu
- 下一篇: form 中Enctype=multip