-
package?com.imooc.xmlTest; import?org.dom4j.DocumentHelper; import?org.dom4j.io.OutputFormat; import?org.dom4j.io.XMLWriter; import?org.jdom2.output.Format; import?org.jdom2.output.XMLOutputter; import?org.testng.annotations.Test; import?org.w3c.dom.Document; import?org.w3c.dom.Element; import?org.xml.sax.SAXException; import?org.xml.sax.helpers.AttributesImpl; import?javax.xml.parsers.DocumentBuilder; import?javax.xml.parsers.DocumentBuilderFactory; import?javax.xml.parsers.ParserConfigurationException; import?javax.xml.transform.OutputKeys; import?javax.xml.transform.Result; import?javax.xml.transform.Transformer; import?javax.xml.transform.TransformerConfigurationException; import?javax.xml.transform.TransformerException; import?javax.xml.transform.TransformerFactory; import?javax.xml.transform.dom.DOMSource; import?javax.xml.transform.sax.SAXTransformerFactory; import?javax.xml.transform.sax.TransformerHandler; import?javax.xml.transform.stream.StreamResult; import?java.io.File; import?java.io.FileOutputStream; import?java.io.IOException; public?class?JUnitTest1?{ ???public?void?DOMCreateXML()?throws?ParserConfigurationException,?TransformerException?{ ???????DocumentBuilderFactory?dbf=DocumentBuilderFactory.newInstance(); ???????DocumentBuilder?db=dbf.newDocumentBuilder(); ???????Document?document=db.newDocument(); ???????document.setXmlStandalone(true); ???????Element?bookstore=document.createElement("bookstore"); ???????Element?book=document.createElement("book"); ???????book.setAttribute("id","1"); ???????Element?name=document.createElement("name"); ???????name.setTextContent("小王子"); ???????book.appendChild(name); ???????bookstore.appendChild(book); ???????document.appendChild(bookstore); ???????TransformerFactory?tff=TransformerFactory.newInstance(); ???????Transformer?tf=tff.newTransformer(); ???????tf.setOutputProperty(OutputKeys.INDENT,"yes"); ???????tf.transform(new?DOMSource(document),new?StreamResult(new?File("demo2/books.xml"))); ???} ???public?void?SAXCreateXML()?throws?ParserConfigurationException,?IOException,?SAXException,?TransformerConfigurationException?{ ???????SAXTransformerFactory?tff=(SAXTransformerFactory)SAXTransformerFactory.newInstance(); ???????TransformerHandler?handler=tff.newTransformerHandler(); ???????Transformer?tf=handler.getTransformer(); ???????tf.setOutputProperty(OutputKeys.ENCODING,"UTF-8"); ???????tf.setOutputProperty(OutputKeys.INDENT,"yes"); ???????Result?result=new?StreamResult(new?FileOutputStream(new?File("demo2/books1.xml"))); ???????handler.setResult(result); ???????handler.startDocument(); ???????AttributesImpl?attr=new?AttributesImpl(); ???????handler.startElement("","","bookstore",attr); ???????????attr.clear(); ???????????attr.addAttribute("","","id","","1"); ???????????handler.startElement("","","book",attr); ???????????attr.clear(); ???????????handler.startElement("","","name",attr); ???????????String?name="小王子"; ???????????handler.characters(name.toCharArray(),0,name.length()); ???????????handler.endElement("","","name"); ???????????handler.endElement("","","book"); ???????????handler.endElement("","","bookstore"); ???????????handler.endDocument(); ???} ???public?void?JDOMCreateXML()?throws?IOException?{ ???????org.jdom2.Element?bookstore=new?org.jdom2.Element("bookstore"); ???????org.jdom2.Document?document=new?org.jdom2.Document(bookstore); ???????org.jdom2.Element?book=new?org.jdom2.Element("book"); ???????book.setAttribute("id","1"); ???????org.jdom2.Element?name=new?org.jdom2.Element("name"); ???????name.setText("小王子"); ???????book.addContent(name); ???????bookstore.addContent(book); ???????Format?format=Format.getPrettyFormat(); ???????format.setEncoding("gbk"); ???????XMLOutputter?xmlOutputter=new?XMLOutputter(format); ???????xmlOutputter.output(document,new?FileOutputStream("demo2/books2.xml")); ???} ???public?void?DOM4JCreateXML()?throws?IOException?{ ???????org.dom4j.Document?document=?DocumentHelper.createDocument(); ???????org.dom4j.Element?bookstore=document.addElement("bookstore"); ???????org.dom4j.Element?book=bookstore.addElement("book"); ???????book.addAttribute("id","1"); ???????org.dom4j.Element?name=book.addElement("name"); ???????name.setText("小王子"); ???????OutputFormat?outputFormat=OutputFormat.createPrettyPrint(); ???????XMLWriter?xmlWriter=new?XMLWriter(new?FileOutputStream("demo2/books3.xml"),outputFormat); ???????xmlWriter.write(document); ???????xmlWriter.close(); ???} ???@Test ???public?void?testPerformance()?throws?Exception{ ???????System.out.println("性能測(cè)試:"); ???????long?start=System.currentTimeMillis(); ???????DOMCreateXML(); ???????System.out.println("DOM:"+(System.currentTimeMillis()-start)); ???????start=System.currentTimeMillis(); ???????SAXCreateXML(); ???????System.out.println("SAX:"+(System.currentTimeMillis()-start)); ???????start=System.currentTimeMillis(); ???????JDOMCreateXML(); ???????System.out.println("JDOM:"+(System.currentTimeMillis()-start)); ???????start=System.currentTimeMillis(); ???????DOM4JCreateXML(); ???????System.out.println("DOM4J:"+(System.currentTimeMillis()-start)); ???} }
SAX的測(cè)試結(jié)果為0,這是不是有問(wèn)題
查看全部 -
JDOM 設(shè)置 XML 格式
format.setIndent("");//這樣寫(xiě)已經(jīng)默認(rèn)換行了,這里面不需要再寫(xiě)\n,否則就換兩行了。Element title = new Element("title");
title.setContent(new CDATA("上海移動(dòng)互聯(lián)網(wǎng)產(chǎn)業(yè)促進(jìn)中心正式揭牌"));//設(shè)置轉(zhuǎn)義,默認(rèn)自帶CDATA標(biāo)簽查看全部 -
public void createXML() {
? ?ArrayList<Book> books = parserXML();
? ?//生成XML
? ?//1、創(chuàng)建一個(gè)TransformerFactory類的對(duì)象
? ?SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
? ?try {
? ? ? ?//通過(guò)SAXTransformerFactory對(duì)象創(chuàng)建一個(gè)TransformerHandler對(duì)象
? ? ? ?TransformerHandler handler = tff.newTransformerHandler();
? ? ? ?//3、通過(guò)Handler對(duì)象創(chuàng)建一個(gè)Transformer對(duì)象
? ? ? ?Transformer tr = handler.getTransformer();
? ? ? ?//4、通過(guò)Transformer對(duì)象生成的xml文件進(jìn)行設(shè)置:設(shè)置xml的編碼;設(shè)置xml是否換行
? ? ? ?tr.setOutputProperty(OutputKeys.ENCODING, "utf-8");
? ? ? ?tr.setOutputProperty(OutputKeys.INDENT, "yes");
? ? ? ?//5、創(chuàng)建一個(gè)Result對(duì)象
? ? ? ?File file = new File("src/res/newbooks.xml");
? ? ? ?if (file.exists()) {
? ? ? ? ? ?file.createNewFile();
? ? ? ?}
? ? ? ?//創(chuàng)建Result對(duì)象,并且使其與handler關(guān)聯(lián)
? ? ? ?Result result = new StreamResult(new FileOutputStream(file));
? ? ? ?handler.setResult(result);
? ? ? ?//7、利用handler對(duì)象進(jìn)行xml文件內(nèi)容的編寫(xiě)
? ? ? ?//打開(kāi)document
? ? ? ?handler.startDocument();
? ? ? ?AttributesImpl attr = new AttributesImpl();
? ? ? ?handler.startElement("", "", "bookstore", attr);
? ? ? ?for (Book book : books) {
? ? ? ? ? ?attr.clear();
? ? ? ? ? ?attr.addAttribute("", "", "id", "", book.getId());
? ? ? ? ? ?handler.startElement("", "", "book", attr);
? ? ? ? ? ?//創(chuàng)建name節(jié)點(diǎn)
? ? ? ? ? ?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");
? ? ? ? ? ?}
? ? ? ? ? ?//創(chuàng)建year節(jié)點(diǎn)
? ? ? ? ? ?if (book.getYear() != null && !book.getYear().trim().equals("")) {
? ? ? ? ? ? ? ?attr.clear();
? ? ? ? ? ? ? ?handler.startElement("", "", "year", attr);
? ? ? ? ? ? ? ?handler.characters(book.getYear().toCharArray(), 0, book.getYear().length());
? ? ? ? ? ? ? ?handler.endElement("", "", "year");
? ? ? ? ? ?}
? ? ? ? ? ?//創(chuàng)建author節(jié)點(diǎn)
? ? ? ? ? ?if (book.getAuthor() != null && !book.getAuthor().trim().equals("")) {
? ? ? ? ? ? ? ?attr.clear();
? ? ? ? ? ? ? ?handler.startElement("", "", "author", attr);
? ? ? ? ? ? ? ?handler.characters(book.getAuthor().toCharArray(), 0, book.getAuthor().length());
? ? ? ? ? ? ? ?handler.endElement("", "", "author");
? ? ? ? ? ?}
? ? ? ? ? ?//創(chuàng)建price節(jié)點(diǎn)
? ? ? ? ? ?if (book.getPrice() != null && !book.getPrice().trim().equals("")) {
? ? ? ? ? ? ? ?attr.clear();
? ? ? ? ? ? ? ?handler.startElement("", "", "price", attr);
? ? ? ? ? ? ? ?handler.characters(book.getPrice().toCharArray(), 0, book.getPrice().length());
? ? ? ? ? ? ? ?handler.endElement("", "", "price");
? ? ? ? ? ?}
? ? ? ? ? ?//創(chuàng)建language節(jié)點(diǎn)
? ? ? ? ? ?if (book.getLanguage() != null && !book.getLanguage().trim().equals("")) {
? ? ? ? ? ? ? ?attr.clear();
? ? ? ? ? ? ? ?handler.startElement("", "", "language", attr);
? ? ? ? ? ? ? ?handler.characters(book.getLanguage().toCharArray(), 0, book.getLanguage().length());
? ? ? ? ? ? ? ?handler.endElement("", "", "language");
? ? ? ? ? ?}
? ? ? ? ? ?handler.endElement("", "", "book");
? ? ? ?}
? ? ? ?handler.endElement("", "", "bookstore");
? ? ? ?//關(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();
? ?}
}查看全部 -
生成XML文件的四種方式:DOM,SAX,DOM4J、JDOM
后兩種方法會(huì)生成一個(gè)全新形式的文件——RSS
查看全部 -
java xml 2查看全部
-
生成xml文件性能對(duì)比
查看全部 -
四種生成xml方式對(duì)比
查看全部 -
常用的節(jié)點(diǎn)類型
查看全部 -
生成xml性能對(duì)比
查看全部 -
四種生成xml方式對(duì)比
DOM基于tree ,生成的DOM樹(shù)保存在內(nèi)存中,方便重新排列、刪除、修改
SAX基于事件,生成后無(wú)法回頭修改
JDOM、DOM4J基于底層API
查看全部 -
JDOM設(shè)置XML格式
查看全部 -
JDOM添加子節(jié)點(diǎn)及節(jié)點(diǎn)間文本
查看全部 -
JDOM生成XML根節(jié)點(diǎn)
查看全部 -
處理轉(zhuǎn)義字符
轉(zhuǎn)義代表< 、>符號(hào)在xml中進(jìn)行轉(zhuǎn)義為<>
XMLWriter的setEscapeText(false) 設(shè)置是否轉(zhuǎn)義,默認(rèn)值true,代表轉(zhuǎn)義
查看全部 -
生成子節(jié)點(diǎn)和內(nèi)容并設(shè)置換行
查看全部 -
生成RSS根節(jié)點(diǎn)以version屬性
查看全部 -
RSS是用來(lái)描述和同步網(wǎng)站內(nèi)容的格式,本質(zhì)是xml
查看全部 -
characters() 在xml標(biāo)簽之間添加文本,第一個(gè)參數(shù)是字符串的char數(shù)組,使用toCharArray()轉(zhuǎn)化,第二個(gè)參數(shù)是字符數(shù)組的起始位置,第二個(gè)參數(shù)是從起始位置開(kāi)始截取的長(zhǎng)度。
注意:如果將setResult方法放在startDocument之后會(huì)報(bào)錯(cuò)。
查看全部 -
AttributesImpl的clear()方法清除屬性 ,addAttribute()前兩個(gè)參數(shù)與命名空間有關(guān),第三個(gè)參數(shù)是屬性名,第四個(gè)參數(shù)是屬性類型,第五個(gè)參數(shù)是屬性值
startDocument() 打開(kāi)document
endDocument() 關(guān)閉document
startElement()前兩個(gè)參數(shù)與命名空間有關(guān),第三個(gè)參數(shù)代表標(biāo)簽名稱,第四個(gè)參數(shù)是屬性集AttributesImpl對(duì)象
endElement()前兩個(gè)參數(shù)與命名空間有關(guān),第三個(gè)參數(shù)代表標(biāo)簽名稱
注意:setOutProperty要生效必須在setResult方法之前。
查看全部 -
SAX生成XML準(zhǔn)備工作
查看全部 -
Document的setXmlStandalone(true) 可以在xml首行中除去standalone屬性
設(shè)置xml的值不應(yīng)使用setNodeValue("") 應(yīng)該使用setTextContent("")
查看全部 -
使用Transormer的transform方法將Document對(duì)象轉(zhuǎn)化為xml文件
setOutputProperty(OutputKeys.INDENT,"yes")方法可以設(shè)置換行
查看全部 -
使用DocumentBuilderFactory創(chuàng)建DocumentBuilder對(duì)象
使用DocumentBuilder對(duì)象生成Document對(duì)象,調(diào)用Document對(duì)象的createElement()方法生成節(jié)點(diǎn), setAttribute("","")方法添加節(jié)點(diǎn)屬性,再調(diào)用appendChild()方法將節(jié)點(diǎn)添加到xml中。
查看全部 -
1.根節(jié)點(diǎn)element,添加屬性 setAttribute()
2.文件document對(duì)象
3.XMLOutputter對(duì)象 outputter.output(document,文件);通過(guò)輸出流轉(zhuǎn)換為xml文件
查看全部
舉報(bào)