Java demo之Java操作XML

Java是一门高级编程语言,自然少不了对各种文件进行操作的功能。现在笔者就来写一个操作XML的demo供大家参考和学习。首先要知道Java对XML操作的方式并非只有一种,那么究竟哪种方式更高效,哪种方式更适用或主流呢?Java主要有四种方式操作XML文件,下面我们就用代码下载来看一看,比较一下。 
    以下是Java创建XML文件的四种主流方式。

Java代码   

  1. public class CreateTest {
  2. /**
  3. * DOM方式生成xml文档
  4. */
  5. private void DOMCreateXML() {
  6. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  7. DocumentBuilder db = null;
  8. try {
  9. db = dbf.newDocumentBuilder();
  10. } catch (ParserConfigurationException e) {
  11. e.printStackTrace();
  12. }
  13. Document document = db.newDocument();
  14. document.setXmlStandalone(true);
  15. Element bookstore = document.createElement("bookStore");
  16. Element book = document.createElement("book");
  17. Element name = document.createElement("name");
  18. name.setTextContent("小王子");
  19. book.appendChild(name);
  20. book.setAttribute("id", "1");
  21. bookstore.appendChild(book);
  22. document.appendChild(bookstore);
  23. TransformerFactory tff = TransformerFactory.newInstance();
  24. try {
  25. Transformer tf = tff.newTransformer();
  26. tf.setOutputProperty(OutputKeys.INDENT, "yes");
  27. tf.transform(new DOMSource(document), new StreamResult(new File(
  28. "books1.xml")));
  29. } catch (TransformerConfigurationException e) {
  30. e.printStackTrace();
  31. } catch (TransformerException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. /**
  36. * SAX方式生成xml文档
  37. */
  38. public void SAXCreateXML() {
  39. SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory
  40. .newInstance();
  41. try {
  42. TransformerHandler handler = tff.newTransformerHandler();
  43. Transformer tr = handler.getTransformer();
  44. tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
  45. tr.setOutputProperty(OutputKeys.INDENT, "yes");
  46. File f = new File("books2.xml");
  47. if (!f.exists()) {
  48. f.createNewFile();
  49. }
  50. Result result = new StreamResult(new FileOutputStream(f));
  51. handler.setResult(result);
  52. handler.startDocument();
  53. AttributesImpl attr = new AttributesImpl();
  54. handler.startElement("", "", "bookstore", attr);
  55. attr.clear();
  56. attr.addAttribute("", "", "id", "", "1");
  57. handler.startElement("", "", "book", attr);
  58. attr.clear();
  59. handler.startElement("", "", "name", attr);
  60. handler.characters("小王子".toCharArray(), 0, "小王子".length());
  61. handler.endElement("", "", "name");
  62. handler.endElement("", "", "book");
  63. handler.endElement("", "", "bookstore");
  64. handler.endDocument();
  65. 下载
  66. } catch (TransformerConfigurationException e) {
  67. e.printStackTrace();
  68. } catch (FileNotFoundException e) {
  69. e.printStackTrace();
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. } catch (SAXException e) {
  73. e.printStackTrace();
  74. }
  75. }
  76. /**
  77. * JDOM方式生成xml文档
  78. */
  79. private void JDOMCreateXML() {
  80. org.jdom2.Element bookstore = new org.jdom2.Element("bookstore");
  81. org.jdom2.Document document = new org.jdom2.Document(bookstore);
  82. org.jdom2.Element book = new org.jdom2.Element("book");
  83. book.setAttribute("id", "1");
  84. org.jdom2.Element name = new org.jdom2.Element("name");
  85. name.setText("小王子");
  86. book.addContent(name);
  87. bookstore.addContent(book);
  88. Format format = Format.getCompactFormat();
  89. format.setIndent("");
  90. format.setEncoding("UTF-8");
  91. XMLOutputter outputer = new XMLOutputter(format);
  92. try {
  93. outputer.output(document, new FileOutputStream(new File("books3.xml")));
  94. } catch (FileNotFoundException e) {
  95. e.printStackTrace();
  96. } catch (IOException e) {
  97. e.printStackTrace();
  98. }
  99. }
  100. /**
  101. * DOM4J方式生成xml文档
  102. */
  103. private void DOM4JCreateXML(){
  104. org.dom4j.Document document = DocumentHelper.createDocument();
  105. org.dom4j.Element bookstore = document.addElement("bookstore");
  106. org.dom4j.Element book = bookstore.addElement("book");
  107. book.addAttribute("id", "1");
  108. org.dom4j.Element name = book.addElement("name");
  109. name.setText("小王子");
  110. OutputFormat format = OutputFormat.createPrettyPrint();
  111. format.setEncoding("UTF-8");
  112. File file = new File("books4.xml");
  113. XMLWriter writer;
  114. try {
  115. writer = new XMLWriter(new FileOutputStream(file), format);
  116. writer.setEscapeText(false);
  117. writer.write(document);
  118. writer.close();
  119. } catch (IOException e) {
  120. e.printStackTrace();
  121. }
  122. }  下载
  123. @Test
  124. public void testPerformance() throws Exception{
  125. System.out.println("性能测试:");
  126. //测试DOM的性能:
  127. long start = System.currentTimeMillis();
  128. DOMCreateXML();
  129. System.out.println("DOM:"+ (System.currentTimeMillis() - start));
  130. //测试SAX的性能:
  131. start = System.currentTimeMillis();
  132. SAXCreateXML();
  133. System.out.println("SAX:"+ (System.currentTimeMillis() - start) );
  134. //测试JDOM的性能:
  135. start = System.currentTimeMillis();
  136. JDOMCreateXML();
  137. System.out.println("JDOM:"+ (System.currentTimeMillis() - start) );
  138. //测试DOM4J的性能:
  139. start = System.currentTimeMillis();
  140. DOM4JCreateXML();
  141. System.out.println("DOM4J:"+ (System.currentTimeMillis() - start) );
  142. }
  143. }

现在笔者贴出控制台输出信息: 
性能测试: 
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文件。所以并不能给出总结性的结论说明哪种方式一定是最好的

时间: 2024-11-08 14:06:38

Java demo之Java操作XML的相关文章

Java操作XML的JAXB工具

在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上的资料,简单说明一下java操作xml的一些东西. 1.先定义一个XML Schema文件.比如: [html] view plain copy print? <?xml version="1.0" encoding="UTF-8" standalone=&quo

java操作XML文件

XML文件可以用来作为一种小型数据库存在,但更多时候在项目中都是用来当成配置文件用的,也就避免不了对XML文件的增上改查操作. 在java中,解析XML文件的方式大致分为两种:DOM解析,SAX解析 先来说DOM解析方式:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容. 用的较为多的是Dom4j工具(非官方)解析,简单介绍下Dom4j的使用,具体API文档请下载

java操作xml的一个小例子

最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要定义好bean的层次结构就可以了,第三方包会自动生成和解析xml. 但是今天发现,这个包有两个问题: 一个是比较复杂(我是菜鸟,求别喷,我真的觉得他挺复杂的..).比如说你要想处理既有属性又有值的xml就比较麻烦.(@XStreamConverter注解这种方法报这个错:com.thoughtwor

Java操作XML文件 dom4j 篇

在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; //工具包 import java.util.Iterator; import java.util.List; //dom4j包 import org.dom

java操作xml超简单的方法

用dom4j?SAX?no,no,no,光看api和帮助文档就烦,有没有更简单的方法呢?答案是有的. 那就是默默无名的:JAXB jaxb是啥? 摘抄一段度娘百科的介绍: JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类.JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@X

Java Stax操作XML简介

使用stax操作xml 非常的简单,它的读取过程像是一个光标在移动.针对不同的节点做不同的处理. 先看一个基于光标的模型处理xml: public class StaxTest { @Test public void test1() { try { // 1.构建XMLStreamReader XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory .createXMLSt

java操作xml文档

目前最常用的XML解析技术是DOM和SAX. DOM是基于XML的树结构来完成解析的,适用于多次访问的XML文档,但是DOM解析比较消耗资源:而SAX是基于事件解析,适用于大数据量的XML文档,占用资源少,内存消耗小. DOM是文档对象模型(Document Object Model) 首先DOM会将XML文档映射成一颗倒挂的树,在这棵树中,每个节点都是以节点对象的形式存在的. 我们通过操作这些对象就可以完成XML文件的读写任务了. 我们可以直接根据节点的名称或属性查找该节点对象,也可以根据一个

java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较

1)DOM(JAXP Crimson解析器)     DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像

java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)

java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便