为什么?
“它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。”XML被设计用来传输和存储数据;
他的平台无关性、语言无关性、系统无关性,给数据继承与交互带来了极大的方便。也因此使用XML的地方越来越常见。
方式
1.DOM--DocumentObject Model
像操作HTML一样,在JS中已经学习过DOM的使用,是W3C组织推荐的处理可扩展标志语言的标准编程接口。DOM解析器把XML文档转化为一个树形结构,并可以对树进行遍历。
优点:便于操作,开发人员只需要调用建树的指令,整个文档树在内存中,然后利用navigationAPIs完成删除、修改、重新排列等多种功能。
缺点:将整个文档加载到内存,耗费资源(时间和空间)。会直接一次性将XML文档读取存到内存,然后进行解析,如果文件较大,需要读取的内容较多,效率较低。
应用场合:一次解析需要对XML文档数据进行多次访问;硬件资源充足(内存、CPU)。
2.SAX--SimpleAPI for XML
SAX是基于事件流的解析,一个用于处理XML事件驱动的“推”模型,类似于媒体流的,SAX解析器在解析XML时可以出发一系列的事件,开发人员通过编写响应事件代码以保存数据。
优点:解决了DOM加载大文件耗费资源的问题
缺点;它的特点也便是他的缺点,必须实现多个事件处理程序才能处理所有到来的时间,逻辑处理较为复杂。
3.JDOM--JavaDocument Object Model
顾名思义:Java特定文档模型,采用二八定律原则,极大减少代码量,把SAX和DOM的功能有效地结合起来。底层仍是使用DOM、SAX实现。
4.DOM4j
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
项目中简单尝试了应用DOM4j的方式解析XML,读取的一般步骤如下:
//SAX方式读取 SAXReader reader = new SAXReader(); //通过Thread拿到当前线程,得到装载器ClassLoader,getResource...(按资源加载)得到输入流 InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("资源相对路径"); Document dc = reader.read(in); //通过XPath方式获取元素Element Element driverNameElt = (Element)dc.selectObject("/config/db-info/driver-name");
总结
DOM与SAX是两种比较基本的解析XML方式,而另外两种都是在DOM与SAX的进一步的封装。
越来越体会到XML的重要性,要想达到系统灵活,配置文件也真是无处不在,对XML的操作还很不熟悉,今天总结了Java下操作XML的几种方式,也希望在后面的学习应用中更加熟练与深刻。
参考资料:
java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较
详解Java解析XML的四种方法
java解析XML的几种方式
http://www.w3.org/