Java中有几种XML解析方式 ? 分别是什么 ? 有什么样的优缺点 ?
答:四种解析方式。
一、SAX解析
解析方式:事件驱动机制;
SAX解析器,逐行读取XML文件解析,每当解析到一个标签的开始/结束/内容/属性时,触发事件。
可以编写程序在这些事件发生时,进行相应的处理。
优点:
分析能够立即开始,而不是等待所有的数据被处理;
逐行加载,节省内存。有助于解析大于系统内存的文档;
有时不必解析整个文档,它可以在某个条件得到满足时停止解析。
缺点:
单向解析,无法定位文档层次,无法同时访问同一文档的部分数据(因为逐行解析,当解析第n行时,第n-1行已经被释放了,无法再进行操作);
无法得知事件发生时元素的层次,只能自己维护节点的父/子关系;
只读解析方式,无法修改XML文档的内容。
二、DOM解析
是用平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个文档和内存中建立文档树模型,程序员可以通过操作文档树来完成数据的获取、修改、删除等。
优点:
文档在内存中加载,允许对数据和结构做出更改;
访问是双向的,可以在任何时候在树中双向解析数据。
缺点:
文档全部加载在内存中,消耗资源大。
三、JDOM解析
目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。
JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。
优点:
使用具体类而不是接口,简化了DOM的API;
大量使用了Java集合类,方便了Java开发人员。
缺点:
没有较好的灵活性;
性能不是name优异。
四、DOM4J解析
它是JDOM的一种智能分支,合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。还提供了构建文档表示的选项,DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
许多开源项目中大量采用DOM4J,例如:Hibernate
步骤:
1、引入jar文件:dom4j.jar
2、创建一个指向XML文件的输入流
FileInputStream fis = new FileInputStream("xml文件的地址");
3、创建一个XML读取工具对象
SAXReader sr = new SAXReader();
4、使用读取工具对象,读取XML文档的输入流,并得到文档对象
Document doc = sr.read(fis);
5、通过文档对象,获取XML文档中的根元素对象
Element root = doc.getRootElement();
文档对象Document:指的是加载到内存的整个XML文档;
常用方法:
1)通过文档对象,获取XML文档中的根元素对象
Element root = doc.getRootElement();
2)添加根节点
Element root = doc.addElement("根节点名称");
元素对象 Element:指的是XML文档中的单个节点
常用方法:
1)获取节点名称:
String getName();
2)获取节点内容
String getText();
3)设置节点内容
String setText();
4)根据子节点的名称,获取匹配名称的第一个子节点对象
Element element(String 子节点名称);
5)获取所有的子节点对象
List<Element> elements();
6)获取节点的属性值
String attributeValue(String 属性名称);
7)获取子节点的内容
String elementText(String 子节点名称);
8)添加子节点
Element addElement(String 子节点名称);
9)添加属性
void addAttribute(String 属性名,String 属性值);