Java demo之Java操作XML

来源:互联网 发布:js给字段赋值 编辑:程序博客网 时间:2024/05/22 20:28
 Java是一门高级编程语言,自然少不了对各种文件进行操作的功能。现在笔者就来写一个操作XML的demo供大家参考和学习。首先要知道Java对XML操作的方式并非只有一种,那么究竟哪种方式更高效,哪种方式更适用或主流呢?Java主要有四种方式操作XML文件,下面我们就用代码下载来看一看,比较一下。 
    以下是Java创建XML文件的四种主流方式。 
Java代码  收藏代码
  1. public class CreateTest {  
  2.   
  3.     /** 
  4.      * DOM方式生成xml文档 
  5.      */  
  6.     private void DOMCreateXML() {  
  7.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  8.         DocumentBuilder db = null;  
  9.         try {  
  10.             db = dbf.newDocumentBuilder();  
  11.         } catch (ParserConfigurationException e) {  
  12.             e.printStackTrace();  
  13.         }  
  14.         Document document = db.newDocument();  
  15.         document.setXmlStandalone(true);  
  16.         Element bookstore = document.createElement("bookStore");  
  17.         Element book = document.createElement("book");  
  18.         Element name = document.createElement("name");  
  19.         name.setTextContent("小王子");  
  20.         book.appendChild(name);  
  21.         book.setAttribute("id""1");  
  22.         bookstore.appendChild(book);  
  23.         document.appendChild(bookstore);  
  24.         TransformerFactory tff = TransformerFactory.newInstance();  
  25.         try {  
  26.             Transformer tf = tff.newTransformer();  
  27.             tf.setOutputProperty(OutputKeys.INDENT, "yes");  
  28.             tf.transform(new DOMSource(document), new StreamResult(new File(  
  29.                     "books1.xml")));  
  30.         } catch (TransformerConfigurationException e) {  
  31.             e.printStackTrace();  
  32.         } catch (TransformerException e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.     }  
  36.       
  37.     /** 
  38.      * SAX方式生成xml文档 
  39.      */  
  40.     public void SAXCreateXML() {  
  41.         SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory  
  42.                 .newInstance();  
  43.         try {  
  44.             TransformerHandler handler = tff.newTransformerHandler();  
  45.             Transformer tr = handler.getTransformer();  
  46.             tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");  
  47.             tr.setOutputProperty(OutputKeys.INDENT, "yes");  
  48.             File f = new File("books2.xml");  
  49.             if (!f.exists()) {  
  50.                 f.createNewFile();  
  51.             }  
  52.             Result result = new StreamResult(new FileOutputStream(f));  
  53.             handler.setResult(result);  
  54.             handler.startDocument();  
  55.             AttributesImpl attr = new AttributesImpl();  
  56.             handler.startElement("""""bookstore", attr);  
  57.             attr.clear();  
  58.             attr.addAttribute("""""id""""1");  
  59.             handler.startElement("""""book", attr);  
  60.             attr.clear();  
  61.             handler.startElement("""""name", attr);  
  62.             handler.characters("小王子".toCharArray(), 0"小王子".length());  
  63.             handler.endElement("""""name");  
  64.           
  65.             handler.endElement("""""book");  
  66.             handler.endElement("""""bookstore");  
  67.             handler.endDocument();  
  68.   
  69.         } catch (TransformerConfigurationException e) {  
  70.             e.printStackTrace();  
  71.         } catch (FileNotFoundException e) {  
  72.             e.printStackTrace();  
  73.         } catch (IOException e) {  
  74.             e.printStackTrace();  
  75.         } catch (SAXException e) {  
  76.             e.printStackTrace();  
  77.         }  
  78.     }  
  79.       下载
  80.     /** 
  81.      * JDOM方式生成xml文档 
  82.      */  
  83.     private void JDOMCreateXML() {  
  84.         org.jdom2.Element bookstore = new org.jdom2.Element("bookstore");  
  85.         org.jdom2.Document document = new org.jdom2.Document(bookstore);  
  86.           
  87.         org.jdom2.Element book = new org.jdom2.Element("book");  
  88.         book.setAttribute("id""1");  
  89.         org.jdom2.Element name = new org.jdom2.Element("name");  
  90.         name.setText("小王子");  
  91.         book.addContent(name);  
  92.         bookstore.addContent(book);  
  93.         Format format = Format.getCompactFormat();  
  94.         format.setIndent("");  
  95.         format.setEncoding("UTF-8");  
  96.         XMLOutputter outputer = new XMLOutputter(format);  
  97.         try {  
  98.             outputer.output(document, new FileOutputStream(new File("books3.xml")));  
  99.         } catch (FileNotFoundException e) {  
  100.             e.printStackTrace();  
  101.         } catch (IOException e) {  
  102.             e.printStackTrace();  
  103.         }  
  104.     }  
  105.       
  106.     /** 
  107.      * DOM4J方式生成xml文档 
  108.      */  
  109.     private void DOM4JCreateXML(){  
  110.         org.dom4j.Document document = DocumentHelper.createDocument();  
  111.         org.dom4j.Element bookstore = document.addElement("bookstore");  
  112.         org.dom4j.Element book = bookstore.addElement("book");  
  113.         book.addAttribute("id""1");  
  114.         org.dom4j.Element name = book.addElement("name");  
  115.         name.setText("小王子");  
  116.         OutputFormat format = OutputFormat.createPrettyPrint();  
  117.         format.setEncoding("UTF-8");  
  118.         File file = new File("books4.xml");  
  119.         XMLWriter writer;  
  120.         try {  
  121.             writer = new XMLWriter(new FileOutputStream(file), format);  
  122.             writer.setEscapeText(false);  
  123.             writer.write(document);  
  124.             writer.close();  
  125.         } catch (IOException e) {  
  126.             e.printStackTrace();  
  127.         }  
  128.     }  下载
  129.       
  130.     @Test  
  131.     public void testPerformance() throws Exception{  
  132.         System.out.println("性能测试:");  
  133.         //测试DOM的性能:  
  134.         long start = System.currentTimeMillis();  
  135.         DOMCreateXML();  
  136.         System.out.println("DOM:"+ (System.currentTimeMillis() - start));  
  137.         //测试SAX的性能:  
  138.         start = System.currentTimeMillis();  
  139.         SAXCreateXML();  
  140.         System.out.println("SAX:"+ (System.currentTimeMillis() - start) );  
  141.         //测试JDOM的性能:  
  142.         start = System.currentTimeMillis();  
  143.         JDOMCreateXML();  
  144.         System.out.println("JDOM:"+ (System.currentTimeMillis() - start) );  
  145.         //测试DOM4J的性能:  
  146.         start = System.currentTimeMillis();  
  147.         DOM4JCreateXML();  
  148.         System.out.println("DOM4J:"+ (System.currentTimeMillis() - start) );  
  149.     }  
  150. }  

现在笔者贴出控制台输出信息: 
性能测试: 
DOM:68 
SAX:4 
JDOM:78 
DOM4J:60 
    由此可得出创建XML文件的速度排名:SAX下载> DOM4J > DOM > JDOM 
    在速度上我们明显可以看出SAX的巨大优势,其次是DOM4J 和DOM ,在性能上笔者推荐使用SAX,其次可以考虑DOM4J 和DOM,而JDOM性能上劣势较为明显,不建议使用 
    另外,作为一名程序员(开发者),代码量和代码复杂度也是值得考量的因素。在这一点上笔者推荐使用DOM4J 
    综合以上两点,笔者推荐使用SAX和DOM4J进行对XML文件的操作更为适用,而且这两种方式也是被大众所推崇的主流方式。 
    但是,以上代码分析仅仅是从创建XML文件上作出的简单分析,而且是创建一个很简单的数据量极小的XML文件。所以并不能给出总结性的结论说明哪种方式一定是最好的
0 0
原创粉丝点击