原文地址:http://developer.51cto.com/art/200903/117512.htm

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知 识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),具体可参阅w3c官方网站文档http://www.w3.org获取更多信息。

XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML的内容和结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<name>ddviplinux</name>
<sex>m</sex>
<age>30</age>
</employee>
</employees>

本文使用JAVA语言来实现DOM与SAX的XML文档生成与解析。
首先定义一个操作XML文档的接口XmlDocument 它定义了XML文档的建立与解析的接口。

package com.alisoft.facepay.framework.bean;
/**
*
* @author hongliang.dinghl
* 定义XML文档建立与解析的接口
*/
public interface XmlDocument {
/**
* 建立XML文档
* @param fileName 文件全路径名称
*/
public void createXml(String fileName);
/**
* 解析XML文档
* @param fileName 文件全路径名称
*/
public void parserXml(String fileName);
} 

1.DOM生成和解析XML文档

为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时 间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

  1 package com.alisoft.facepay.framework.bean;
  2 import java.io.FileInputStream;
  3 import java.io.FileNotFoundException;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.PrintWriter;
  8 import javax.xml.parsers.DocumentBuilder;
  9 import javax.xml.parsers.DocumentBuilderFactory;
 10 import javax.xml.parsers.ParserConfigurationException;
 11 import javax.xml.transform.OutputKeys;
 12 import javax.xml.transform.Transformer;
 13 import javax.xml.transform.TransformerConfigurationException;
 14 import javax.xml.transform.TransformerException;
 15 import javax.xml.transform.TransformerFactory;
 16 import javax.xml.transform.dom.DOMSource;
 17 import javax.xml.transform.stream.StreamResult;
 18 import org.w3c.dom.Document;
 19 import org.w3c.dom.Element;
 20 import org.w3c.dom.Node;
 21 import org.w3c.dom.NodeList;
 22 import org.xml.sax.SAXException;
 23 /**
 24 *
 25 * @author hongliang.dinghl
 26 * DOM生成与解析XML文档
 27 */
 28 public class DomDemo implements XmlDocument {
 29 private Document document;
 30 private String fileName;
 31 public void init() {
 32 try {
 33 DocumentBuilderFactory factory = DocumentBuilderFactory
 34 .newInstance();
 35 DocumentBuilder builder = factory.newDocumentBuilder();
 36 this.document = builder.newDocument();
 37 } catch (ParserConfigurationException e) {
 38 System.out.println(e.getMessage());
 39 }
 40 }
 41 public void createXml(String fileName) {
 42 Element root = this.document.createElement("employees");
 43 this.document.appendChild(root);
 44 Element employee = this.document.createElement("employee");
 45 Element name = this.document.createElement("name");
 46 name.appendChild(this.document.createTextNode("丁宏亮"));
 47 employee.appendChild(name);
 48 Element sex = this.document.createElement("sex");
 49 sex.appendChild(this.document.createTextNode("m"));
 50 employee.appendChild(sex);
 51 Element age = this.document.createElement("age");
 52 age.appendChild(this.document.createTextNode("30"));
 53 employee.appendChild(age);
 54 root.appendChild(employee);
 55 TransformerFactory tf = TransformerFactory.newInstance();
 56 try {
 57 Transformer transformer = tf.newTransformer();
 58 DOMSource source = new DOMSource(document);
 59 transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
 60 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
 61 PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
 62 StreamResult result = new StreamResult(pw);
 63 transformer.transform(source, result);
 64 System.out.println("生成XML文件成功!");
 65 } catch (TransformerConfigurationException e) {
 66 System.out.println(e.getMessage());
 67 } catch (IllegalArgumentException e) {
 68 System.out.println(e.getMessage());
 69 } catch (FileNotFoundException e) {
 70 System.out.println(e.getMessage());
 71 } catch (TransformerException e) {
 72 System.out.println(e.getMessage());
 73 }
 74 }
 75 public void parserXml(String fileName) {
 76 try {
 77 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 78 DocumentBuilder db = dbf.newDocumentBuilder();
 79 Document document = db.parse(fileName);
 80 NodeList employees = document.getChildNodes();
 81 for (int i = 0; i < employees.getLength(); i++) {
 82 Node employee = employees.item(i);
 83 NodeList employeeInfo = employee.getChildNodes();
 84 for (int j = 0; j < employeeInfo.getLength(); j++) {
 85 Node node = employeeInfo.item(j);
 86 NodeList employeeMeta = node.getChildNodes();
 87 for (int k = 0; k < employeeMeta.getLength(); k++) {
 88 System.out.println(employeeMeta.item(k).getNodeName()
 89 + ":" + employeeMeta.item(k).getTextContent());
 90 }
 91 }
 92 }
 93 System.out.println("解析完毕");
 94 } catch (FileNotFoundException e) {
 95 System.out.println(e.getMessage());
 96 } catch (ParserConfigurationException e) {
 97 System.out.println(e.getMessage());
 98 } catch (SAXException e) {
 99 System.out.println(e.getMessage());
100 } catch (IOException e) {
101 System.out.println(e.getMessage());
102 }
103 }    }

2.SAX生成和解析XML文档

为解决DOM的问题,出现了SAX。SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个 文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态 性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

3.DOM4J生成和解析XML文档

DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

4.JDOM生成和解析XML

为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。

转载于:https://www.cnblogs.com/davidwang456/archive/2013/04/02/2995638.html

详解Java解析XML的四种方法(转载)相关推荐

  1. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  2. java 的xml_详解Java解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM ...

  3. java dom4j api_详解Java解析XML的四种方法(推荐使用DOM4J,因为for Java)

    前言 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有 ...

  4. Java解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM ...

  5. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax;import org.xml.sax.Attributes; import org.xml.sax.SAXEx ...

  6. java解析xml文件四种方式介绍、性能比较和基本使用方法

    2019独角兽企业重金招聘Python工程师标准>>> 一.基本介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...

  7. Java 解析XML的几种方法

    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便. XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已. 基本的解析方式 ...

  8. php 解析xml 的四种方法(转)

    转载链接:http://www.cnblogs.com/likwo/archive/2011/08/24/2151793.html XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只 ...

  9. Java解析Xml的三种方式总结

    转自:http://blog.csdn.net/zjf280441589/article/details/50613881 XML解析技术有两种 DOM SAX DOM方式  根据XML的层级结构在内 ...

最新文章

  1. c++经典书籍--Effective C++
  2. javascript --- 隐藏内部实现(最小暴露原则)
  3. 基于MapWinGis的开发探索(三)--改善缩放、渲染、显示文本
  4. java ranger rest_使用REST
  5. Excel导入数据的实现
  6. latex 使用ppt导出pdf图片
  7. Spring Cloud 子项目
  8. Java String 常量池
  9. ShuffleNet 算法的介绍
  10. 学习Nisy作者c语言教程笔记1
  11. 对SE_ResNet的理解
  12. SQL注入原理及绕过技术
  13. 给的再多,不如懂我——Gif录制工具,这两个就够了
  14. PPT模板的动画去掉或更改
  15. 『曹大带我学 Go 』系列文章汇总
  16. rpm包管理器常见用法
  17. PostgreSQL数据外部表使用(postgres_fdw)
  18. TensorFlow技术内幕(八):模型优化之XLA(下)
  19. AFEPack 使用 Tutorial(一):解二维泊松方程
  20. ImmutableList hessian2序列化失败问题分析

热门文章

  1. linux如何时间更新最新版本,桌面应用|Linux有问必答:如何更新过期版本的Ubuntu...
  2. 欧式期权matlab编码蒙特卡罗方法,基于MATLAB的金融工程方法与实践第七章 基于蒙特卡洛方法的期权定价.ppt...
  3. Android中的Dialog
  4. android表格自动刷新,Android SwipeRefreshLayout 自动刷新
  5. 江西理工大学c语言程序设计,C语言程序设计
  6. ceph编译_Ceph编译:L版本及其之后的版本
  7. js寻找两个数组的差集_js求两个数组的交集|并集|差集|去重
  8. 104. Leetcode 337. 打家劫舍 III (动态规划-打家劫舍)
  9. 隐式马可夫模型(hidden markov model,HMM)
  10. ntu课程笔记7454 期中复习