Java生成XML文件
上一篇文章写了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 }
运行结果: