《java架构宝典》文集说明本文集记载的所有内容均是java的学习笔记,主要重点记录概念,可能不会为每个概念列举完整的代码例子,更多代码例子请移步《java架构宝典》文集
若有错漏之处,欢迎各位指正
XML简介
XML,可扩展标记语言(eXtensible Markup Language),主要用于网络数据传输,数据存储,及配置文件等。
这里简单介绍一下XML的基础语法:XML文档声明 <?xml version="1.0" encoding="UTF-8"?>
XML文档由一对对标记组成
属性可以在开始标记中被描述,属性以 键="值" 的方式存储,多个属性之间由空格分割
XML文档中必须有且只有一个根标记
标记可以嵌套,但不允许交叉
以下是一个例子
XML的解析方式
SAX解析
SAX, Simple API for XML事件驱动的解析机制
SAX解析器会逐行阅读,当读取到一个标记的开始、属性、内容、结束时触发事件
需要编写事件触发的相应处理程序
优点无需等待数据全部加载完毕,立即开始分析
逐行加载,节省内存
不必解析整个文档,可以在满足某个条件时停止解析
缺点单向解析,无法对之前的数据再进行操作
逐行解析无法得知复杂的元素的层次,只能维护父子关系的节点
只读解析,无法修改内容
DOM解析
DOM,文档对象模型(Document Object Model),欢迎关注GZH(Java架构宝典)。DOM将XML文档解析成树状结构,程序员可以通过操作此文档树来获取、修改、删除数据。
优点文档被加载至内存,允许对数据和结构进行更改
支持双向解析数据
缺点文档全部被加载至内存中,消耗资源大
Java中的DOM解析
对比SAX解析和DOM解析,后者的缺点可以忽略不计,因此主要使用DOM解析的方式处理XML文档
JDOM
如上文所说,DOM解析本身是面向所有平台的接口,DOM提供给Java的接口也只是达到了能够实现的最低通用标准,并没有特地考虑到Java的特性并作出相应的优化设计,因此Java程序员直接使用DOM的接口则会感觉到不便。
JDOM则是为了解决这一问题,由Brett McLaughlin和Jason Hunter开发出来的开源项目,该项目致力于提供完善方便的用Java解析XML的解决方案。
优点实现了许多工具类,比起直接使用DOM的API,简便了XML的解析过程
加入了大量java集合,方便java程序员进行开发
缺点不是面向接口设计,没有较好的灵活性
优化并不是很好,性能没有那么优异
DOM4J
DOM4J也是为Java设计的用于解析XML的开源(Application Programming Interface,应用程序接口)
和JDOM相比,DOM4J的性能更为优异,功能更加强大,使用更加便捷,因此也更为常用
代码实现步骤下载并引入dom4j.jar
获取要解析的XML文档的输入流
创建XML读取工具对象 SAXReader sr = new SAXReader();
通过XML读取工具对象读取输入流,获取文档对象(加载到内存的整个XML文档) Document doc = sr.read(inputStream);
通过文档对象获得根元素对象再进行后续操作 Element root = doc.getRootElement();
元素对象 Element 常用操作获取节点名称 String getName();
获取节点内容 String getText();
设置节点内容 void setText(String text);
根据子节点的名称,获取匹配到的第一个子节点对象 Element element(String name)
获取所有的子节点对象 List elements();
获取节点的属性值 String attributeValue(String attributeName);
获取子节点的内容 String elementText(String childName);
添加子节点 Element addElement(String s)
添加属性 Element addAttribute(String name, String value);
示例
运行结果