上一篇文章寫了xml文件4種讀取方式,本篇文章將簡介使用四種方式對xml進行寫入。
- DOM
- SAX
- DOM4j
- JDOM
1.DOM
1 import java.io.File; 2 3 import javax.xml.parsers.DocumentBuilder; 4 import javax.xml.parsers.DocumentBuilderFactory; 5 import javax.xml.transform.OutputKeys; 6 import javax.xml.transform.Transformer; 7 import javax.xml.transform.TransformerFactory; 8 import javax.xml.transform.dom.DOMSource; 9 import javax.xml.transform.stream.StreamResult; 10 11 import org.w3c.dom.Document; 12 import org.w3c.dom.Element; 13 14 public class DomToXmlDemo { 15 16 /** 17 * 生成xml方法 18 */ 19 public static void createXml() { 20 try { 21 // 1.創建DocumentBuilderFactory對象 22 DocumentBuilderFactory factory = DocumentBuilderFactory 23 .newInstance(); 24 // 2.創建DocumentBuilder對象 25 DocumentBuilder builder = factory.newDocumentBuilder(); 26 // 3.創建Document對象 27 Document document = builder.newDocument(); 28 // 4.設置不顯示“standalone="no"” 29 document.setXmlStandalone(true); 30 31 // 5.創建根元素bookstore 32 Element bookstore = document.createElement("bookstore"); 33 34 // 6.循環向bookstore根節點中添加子節點book 35 for (int i = 1; i <= 3; i++) { 36 Element book = document.createElement("book"); 37 // 7.向book根節點中添加子節點name 38 Element name = document.createElement("name"); 39 name.setTextContent("Java程序設計" + i); 40 book.appendChild(name); 41 42 // 向book根節點中添加子節點author 43 Element author = document.createElement("author"); 44 author.setTextContent("張三" + i); 45 book.appendChild(author); 46 47 // 向book根節點中添加子節點author 48 Element price = document.createElement("price"); 49 price.setTextContent("6" + i); 50 price.setAttribute("type", "元"); 51 book.appendChild(price); 52 53 // 8.為book節點添加屬性 54 book.setAttribute("id", "0" + i); 55 // 9.將book節點添加到bookstore根節點中 56 bookstore.appendChild(book); 57 } 58 59 // 10.將bookstore節點(已包含book)添加到dom樹中 60 document.appendChild(bookstore); 61 62 // 11.創建TransformerFactory對象 63 TransformerFactory tff = TransformerFactory.newInstance(); 64 // 12.創建 Transformer對象 65 Transformer tf = tff.newTransformer(); 66 // 13.輸出內容是否使用換行 67 tf.setOutputProperty(OutputKeys.INDENT, "yes"); 68 69 // 14.創建xml文件並寫入內容 70 tf.transform(new DOMSource(document), new StreamResult(new File( 71 "book1.xml"))); 72 System.out.println("生成book1.xml成功"); 73 } catch (Exception e) { 74 e.printStackTrace(); 75 System.out.println("生成book1.xml失敗"); 76 } 77 } 78 79 public static void main(String[] args) { 80 Long start = System.currentTimeMillis(); 81 createXml(); 82 System.out.println("運行時間:" + (System.currentTimeMillis() - start)); 83 } 84 85 }
運行結果:

2.SAX
1 import java.io.File; 2 import java.io.FileOutputStream; 3 4 import javax.xml.transform.OutputKeys; 5 import javax.xml.transform.Result; 6 import javax.xml.transform.Transformer; 7 import javax.xml.transform.sax.SAXTransformerFactory; 8 import javax.xml.transform.sax.TransformerHandler; 9 import javax.xml.transform.stream.StreamResult; 10 11 import org.xml.sax.helpers.AttributesImpl; 12 13 public class SaxToXmlDemo { 14 15 // 生成xml 16 public static void createXml() { 17 // 1、創建一個SAXTransformerFactory類的對象 18 SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory 19 .newInstance(); 20 try { 21 // 2、通過SAXTransformerFactory創建一個TransformerHandler的對象 22 TransformerHandler handler = tff.newTransformerHandler(); 23 // 3、通過handler創建一個Transformer對象 24 Transformer tr = handler.getTransformer(); 25 // 4、通過Transformer對象對生成的xml文件進行設置 26 // 設置編碼方式 27 tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 28 // 設置是否換行 29 tr.setOutputProperty(OutputKeys.INDENT, "yes"); 30 // 5、創建一個Result對象 31 File f = new File("book2.xml"); 32 // 判斷文件是否存在 33 if (!f.exists()) { 34 f.createNewFile(); 35 } 36 Result result = new StreamResult(new FileOutputStream(f)); 37 // 6、使Result與handler關聯 38 handler.setResult(result); 39 40 // 打開document 41 handler.startDocument(); 42 AttributesImpl attr = new AttributesImpl(); 43 handler.startElement("", "", "bookstore", attr); 44 // attr.clear(); 45 46 for (int i = 1; i <= 3; i++) { 47 attr.clear(); 48 attr.addAttribute("", "", "id", "", "0" + i); 49 handler.startElement("", "", "book", attr); 50 51 // 創建name 52 attr.clear(); 53 handler.startElement("", "", "name", attr); 54 String name = "Java程序設計" + i; 55 handler.characters(name.toCharArray(), 0, name.length()); 56 handler.endElement("", "", "name"); 57 58 // 創建author 59 attr.clear(); 60 handler.startElement("", "", "author", attr); 61 String author = "張三" + i; 62 handler.characters(author.toCharArray(), 0, author.length()); 63 handler.endElement("", "", "author"); 64 65 // 創建price 66 attr.clear(); 67 attr.addAttribute("", "", "type", "", "元"); 68 handler.startElement("", "", "price", attr); 69 double price = 60 + i; 70 handler.characters(("" + price).toCharArray(), 0, 71 ("" + price).length()); 72 handler.endElement("", "", "price"); 73 74 handler.endElement("", "", "book"); 75 } 76 handler.endElement("", "", "bookstore"); 77 // 關閉document 78 handler.endDocument(); 79 System.out.println("生成book2.xml成功"); 80 } catch (Exception e) { 81 e.printStackTrace(); 82 System.out.println("生成book2.xml失敗"); 83 } 84 } 85 86 public static void main(String[] args) { 87 Long start = System.currentTimeMillis(); 88 createXml(); 89 System.out.println("運行時間:" + (System.currentTimeMillis() - start)); 90 } 91 }
運行結果:

3.DOM4j
1 import java.io.File; 2 import java.io.FileOutputStream; 3 4 import org.dom4j.Document; 5 import org.dom4j.DocumentHelper; 6 import org.dom4j.Element; 7 import org.dom4j.io.OutputFormat; 8 import org.dom4j.io.XMLWriter; 9 10 public class Dom4jToXmlDemo { 11 12 /** 13 * 生成xml方法 14 */ 15 public static void createXml() { 16 try { 17 // 1、創建document對象 18 Document document = DocumentHelper.createDocument(); 19 // 2、創建根節點bookstore 20 Element bookstore = document.addElement("bookstore"); 21 // 3、向bookstore節點添加version屬性 22 bookstore.addAttribute("address", "新華書店"); 23 // 4、生成子節點及子節點內容 24 Element book = bookstore.addElement("book"); 25 book.addAttribute("id", "01"); 26 Element name = book.addElement("name"); 27 name.setText("Java程序設計"); 28 Element author = book.addElement("author"); 29 author.setText("張三"); 30 Element price = book.addElement("price"); 31 price.setText("60"); 32 price.addAttribute("type", "元"); 33 34 // 5、設置生成xml的格式 35 OutputFormat format = OutputFormat.createPrettyPrint(); 36 // 設置編碼格式 37 format.setEncoding("UTF-8"); 38 39 // 6、生成xml文件 40 File file = new File("book3.xml"); 41 XMLWriter writer = new XMLWriter(new FileOutputStream(file), format); 42 // 設置是否轉義,默認使用轉義字符 43 writer.setEscapeText(false); 44 writer.write(document); 45 writer.close(); 46 System.out.println("生成book3.xml成功"); 47 } catch (Exception e) { 48 e.printStackTrace(); 49 System.out.println("生成book3.xml失敗"); 50 } 51 } 52 53 public static void main(String[] args) { 54 Long start = System.currentTimeMillis(); 55 createXml(); 56 System.out.println("運行時間:" + (System.currentTimeMillis() - start)); 57 } 58 59 }
運行結果:

4.JDOM
1 import java.io.File; 2 import java.io.FileOutputStream; 3 4 import org.jdom2.Document; 5 import org.jdom2.Element; 6 import org.jdom2.output.Format; 7 import org.jdom2.output.XMLOutputter; 8 9 public class JdomToXmlDemo { 10 11 /** 12 * 生成xml方法 13 */ 14 public static void createXml() { 15 try { 16 // 1、生成一個根節點 17 Element bookstore = new Element("bookstore"); 18 // 2、為節點添加屬性 19 bookstore.setAttribute("address", "新華書店"); 20 // 3、生成一個document對象 21 Document document = new Document(bookstore); 22 23 Element book = new Element("book"); 24 book.setAttribute("id", "01"); 25 bookstore.addContent(book); 26 Element name = new Element("name"); 27 name.setText("Java程序設計"); 28 book.addContent(name); 29 Element author = new Element("author"); 30 author.setText("張三"); 31 book.addContent(author); 32 Element price = new Element("price"); 33 price.setText("60"); 34 price.setAttribute("type", "元"); 35 book.addContent(price); 36 37 Format format = Format.getCompactFormat(); 38 // 設置換行Tab或空格 39 format.setIndent(" "); 40 format.setEncoding("UTF-8"); 41 42 // 4、創建XMLOutputter的對象 43 XMLOutputter outputer = new XMLOutputter(format); 44 45 // 5、利用outputer將document轉換成xml文檔 46 File file = new File("book4.xml"); 47 outputer.output(document, new FileOutputStream(file)); 48 49 System.out.println("生成book4.xml成功"); 50 } catch (Exception e) { 51 System.out.println("生成book4.xml失敗"); 52 } 53 } 54 55 public static void main(String[] args) { 56 Long start = System.currentTimeMillis(); 57 createXml(); 58 System.out.println("運行時間:" + (System.currentTimeMillis() - start)); 59 } 60 61 }
運行結果:

