zoukankan      html  css  js  c++  java
  • javaXML文件的写入之DOM和DOM4J

    1.DOM篇

    首先是DOM的操作方法,字符串数据可以从对象中读,例如上篇提到的Person对象,这里为了方便直接手写。

     1 package com.dom.node;
     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 import org.w3c.dom.Document;
    11 import org.w3c.dom.Element;
    12 
    13 public class DomXml {
    14     public static void main(String[] args) {
    15         try {
    16             // 第一步:创建DOM树
    17             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    18             DocumentBuilder db = dbf.newDocumentBuilder();
    19             Document document = db.newDocument();
    20             document.setXmlStandalone(true);
    21             // 第二步:完善树结构
    22                  // 创建节点
    23             Element bookstore = document.createElement("bookstore");
    24             Element book1 = document.createElement("book");
    25             Element book2 = document.createElement("book");
    26             Element name1 = document.createElement("name");
    27             Element price1 = document.createElement("price");
    28             Element when1 = document.createElement("when");
    29             Element name2 = document.createElement("name");
    30             Element price2 = document.createElement("price");
    31             Element when2 = document.createElement("when");
    32                  // 设置节点的属性、内容
    33             book1.setAttribute("from", "China");
    34             book2.setAttribute("from", "America");
    35             name1.setTextContent("三国演义");
    36             price1.setTextContent("¥89");
    37             when1.setTextContent("2017版");
    38             name2.setTextContent("JavaScript高级程序设计");
    39             price2.setTextContent("$18");
    40             when2.setTextContent("2016");
    41                  // 将子节点添加到父节点
    42             book1.appendChild(name1);
    43             book1.appendChild(price1);
    44             book1.appendChild(when1);
    45             book2.appendChild(name2);
    46             book2.appendChild(price2);
    47             book2.appendChild(when2);
    48             bookstore.appendChild(book1);
    49             bookstore.appendChild(book2);
    50             document.appendChild(bookstore);
    51             // 第三步:将树结构导入book.xml文件中
    52             TransformerFactory tff = TransformerFactory.newInstance();
    53             Transformer tf = tff.newTransformer();
    54             tf.setOutputProperty(OutputKeys.INDENT, "yes");// 节点换行
    55             tf.transform(new DOMSource(document), new StreamResult("file/book.xml"));
    56         } catch (Exception e) {
    57             e.printStackTrace();
    58         }
    59     }
    60 
    61 }

    下面是生成的XML文件

     1 <?xml version="1.0" encoding="UTF-8"?><bookstore>
     2 <book from="China">
     3 <name>三国演义</name>
     4 <price>¥89</price>
     5 <when>2017版</when>
     6 </book>
     7 <book from="America">
     8 <name>JavaScript高级程序设计</name>
     9 <price>$18</price>
    10 <when>2016</when>
    11 </book>
    12 </bookstore>

    DOM方法生成的xml文件就是这样的,没有进行格式化处理。

    2.DOM4J篇

     操作方法:

     1 package com.dom.node;
     2 
     3 import java.io.FileOutputStream;
     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 Dom4JwriteXML {
    11     public static void main(String[] args) {
    12         try {
    13             //第一步:创建文档对象document
    14             Document document = DocumentHelper.createDocument();
    15             //第二步:由外到内添加子节点
    16             Element bookstore = document.addElement("bookstore");
    17             Element book1 = bookstore.addElement("book");
    18             Element book2 = bookstore.addElement("book");
    19             Element name1 = book1.addElement("name");
    20             Element price1 = book1.addElement("price");
    21             Element when1 = book1.addElement("when");
    22             Element name2 = book2.addElement("name");
    23             Element price2 = book2.addElement("price");
    24             Element when2 = book2.addElement("when");
    25             //第三步:设置节点的属性、内容
    26             book1.addAttribute("from", "China");
    27             book2.addAttribute("from", "America");
    28             name1.setText("三国演义");
    29             price1.setText("¥89");
    30             when1.setText("2017版");
    31             name2.setText("JavaScript高级程序设计");
    32             price2.setText("$18");
    33             when2.setText("2016");
    34             //设置输出格式            
    35             OutputFormat format = OutputFormat.createPrettyPrint();
    36             //设置文件编码
    37             format.setEncoding("GBK");        
    38             //将写好的文档document输出到指定XML文件中并关闭XMLWriter对象
    39             XMLWriter xml = new XMLWriter(new FileOutputStream("file/books.xml"),format);
    40                  //有时候我们的内容text中会有诸如/、>之类的,我们要告诉XML,不要转义这些字符
    41             xml.setEscapeText(false);
    42             xml.write(document);
    43             xml.close();
    44         } catch (Exception e) {    
    45             e.printStackTrace();
    46         }
    47     }
    48 }

    输出的XML文件

     1 <?xml version="1.0" encoding="GBK"?>
     2 
     3 <bookstore>
     4   <book from="China">
     5     <name>三国演义</name>
     6     <price>¥89</price>
     7     <when>2017版</when>
     8   </book>
     9   <book from="America">
    10     <name>JavaScript高级程序设计</name>
    11     <price>$18</price>
    12     <when>2016</when>
    13   </book>
    14 </bookstore>

    还是这样看起来比较舒服吧。

    总结:

       我们不难看出,在XML文件的写入方法上,DOM方法要先用creatElement()方法创建节点,然后使用appendChild()

       方法将节点添加到父节点,而DOM4J方法将两步做了一个综合---addElement()方法,并且在其他方面也较DOM方法

       做了拓展,更重要的是性能优于DOM方法。

       下面一张图就四种方法的速度方面做了对比:

       

       SAX由于是采用事件驱动模式,对内存耗费较小,速度较快,

       但是,正因为如此,SAX在对数据操作上灵活性大打折扣,

       所以当下,开发者更倾向于使用DOM4J的写入方法。

  • 相关阅读:
    判断日期是否是法定节假日或者休息日
    linux版powershell安装教程(.net core版)
    两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍
    powershell中使用超大内存对象
    powershell脚本,命令行参数传值,并绑定变量的例子
    在docker容器中安装和使用,linux版的powershell
    powershell开源新闻及简介
    用powershell+excel行列转置三步走
    让powershell同时只能运行一个脚本(进程互斥例子)
    powershell玩转SQL SERVER所有版本
  • 原文地址:https://www.cnblogs.com/eco-just/p/7761067.html
Copyright © 2011-2022 走看看