-
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("性能測試:"); ???????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的測試結果為0,這是不是有問題
查看全部 -
JDOM 設置 XML 格式
format.setIndent("");//這樣寫已經默認換行了,這里面不需要再寫\n,否則就換兩行了。Element title = new Element("title");
title.setContent(new CDATA("上海移動互聯(lián)網產業(yè)促進中心正式揭牌"));//設置轉義,默認自帶CDATA標簽查看全部 -
public void createXML() {
? ?ArrayList<Book> books = parserXML();
? ?//生成XML
? ?//1、創(chuàng)建一個TransformerFactory類的對象
? ?SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
? ?try {
? ? ? ?//通過SAXTransformerFactory對象創(chuàng)建一個TransformerHandler對象
? ? ? ?TransformerHandler handler = tff.newTransformerHandler();
? ? ? ?//3、通過Handler對象創(chuàng)建一個Transformer對象
? ? ? ?Transformer tr = handler.getTransformer();
? ? ? ?//4、通過Transformer對象生成的xml文件進行設置:設置xml的編碼;設置xml是否換行
? ? ? ?tr.setOutputProperty(OutputKeys.ENCODING, "utf-8");
? ? ? ?tr.setOutputProperty(OutputKeys.INDENT, "yes");
? ? ? ?//5、創(chuàng)建一個Result對象
? ? ? ?File file = new File("src/res/newbooks.xml");
? ? ? ?if (file.exists()) {
? ? ? ? ? ?file.createNewFile();
? ? ? ?}
? ? ? ?//創(chuàng)建Result對象,并且使其與handler關聯(lián)
? ? ? ?Result result = new StreamResult(new FileOutputStream(file));
? ? ? ?handler.setResult(result);
? ? ? ?//7、利用handler對象進行xml文件內容的編寫
? ? ? ?//打開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é)點
? ? ? ? ? ?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é)點
? ? ? ? ? ?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é)點
? ? ? ? ? ?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é)點
? ? ? ? ? ?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é)點
? ? ? ? ? ?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");
? ? ? ?//關閉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
后兩種方法會生成一個全新形式的文件——RSS
查看全部 -
java xml 2查看全部
-
生成xml文件性能對比
查看全部 -
四種生成xml方式對比
查看全部 -
常用的節(jié)點類型
查看全部 -
生成xml性能對比
查看全部 -
四種生成xml方式對比
DOM基于tree ,生成的DOM樹保存在內存中,方便重新排列、刪除、修改
SAX基于事件,生成后無法回頭修改
JDOM、DOM4J基于底層API
查看全部 -
JDOM設置XML格式
查看全部 -
JDOM添加子節(jié)點及節(jié)點間文本
查看全部 -
JDOM生成XML根節(jié)點
查看全部 -
處理轉義字符
轉義代表< 、>符號在xml中進行轉義為<>
XMLWriter的setEscapeText(false) 設置是否轉義,默認值true,代表轉義
查看全部 -
生成子節(jié)點和內容并設置換行
查看全部 -
生成RSS根節(jié)點以version屬性
查看全部 -
RSS是用來描述和同步網站內容的格式,本質是xml
查看全部 -
characters() 在xml標簽之間添加文本,第一個參數(shù)是字符串的char數(shù)組,使用toCharArray()轉化,第二個參數(shù)是字符數(shù)組的起始位置,第二個參數(shù)是從起始位置開始截取的長度。
注意:如果將setResult方法放在startDocument之后會報錯。
查看全部 -
AttributesImpl的clear()方法清除屬性 ,addAttribute()前兩個參數(shù)與命名空間有關,第三個參數(shù)是屬性名,第四個參數(shù)是屬性類型,第五個參數(shù)是屬性值
startDocument() 打開document
endDocument() 關閉document
startElement()前兩個參數(shù)與命名空間有關,第三個參數(shù)代表標簽名稱,第四個參數(shù)是屬性集AttributesImpl對象
endElement()前兩個參數(shù)與命名空間有關,第三個參數(shù)代表標簽名稱
注意:setOutProperty要生效必須在setResult方法之前。
查看全部 -
SAX生成XML準備工作
查看全部 -
Document的setXmlStandalone(true) 可以在xml首行中除去standalone屬性
設置xml的值不應使用setNodeValue("") 應該使用setTextContent("")
查看全部 -
使用Transormer的transform方法將Document對象轉化為xml文件
setOutputProperty(OutputKeys.INDENT,"yes")方法可以設置換行
查看全部 -
使用DocumentBuilderFactory創(chuàng)建DocumentBuilder對象
使用DocumentBuilder對象生成Document對象,調用Document對象的createElement()方法生成節(jié)點, setAttribute("","")方法添加節(jié)點屬性,再調用appendChild()方法將節(jié)點添加到xml中。
查看全部 -
1.根節(jié)點element,添加屬性 setAttribute()
2.文件document對象
3.XMLOutputter對象 outputter.output(document,文件);通過輸出流轉換為xml文件
查看全部
舉報