定义:
XML(extensible Markup Language) ,是一种数据标记语言 & 传输格式
1.DOM(Document Object Model)解析
XML文件对象模型,定义了访问和操作xml文档元素的方法和接口。
工作原理: DOM是基于树形结构的的节点的文档驱动方法。使用DOM对XML文件进行操作时,首先解析器读入整个XML文档到内存中,然后解析全部文件,并将文件分为独立的元素、属性等,以树结构的形式在内存中对XML文件进行表示,开发人员通过使用DOM API遍历XML树,根据需要修改文档或检索所需数据。
解析步骤:
1、调用 DocumentBuilderFactory.newInstance() 方法得到 DOM 解析器工厂类实例;
2、调用解析器工厂实例类的 newDocumentBuilder() 方法得到 DOM 解析器对象;
3、调用DOM解析器对象的parse()方法解析XML文档得到代表整个文档的Document 对象。
- 优点:整个文档树存在内存中,可对XML文档进行操作:删除、修改等等;可多次访问已解析的文档;由于在内存中以树形结构存放,因此检索和更新效率会更高;
- 缺点:解析 XML 文件时会将整个 XML 文件的内容解析成树型结构存放在内存中并创建新对象,比较消耗时间和内存。
2.SAX解析
工作原理:基于事件驱动,在读取XML文档内容时,事件源顺序地对文档进行扫描,当扫描到文档的开始与结束(Document)标签、节点元素的开始与结束(Element)标签时,直接调用对应的方法,并将状态信息以参数的形式传递到方法中,然后我们可以依据状态信息来执行相关的自定义操作。
- 优点:解析效率高、占存少、灵活性高 ;
- 缺点:解析方法复杂(API接口复杂),代码量大;可拓展性差:无法对 XML 树内容结构进行任何修改。
适用于需要处理大型 XML 文档、性能要求较高、不需要对解析文档进行修改且不需要对解析文档多次访问的场合。
3.PULL解析
工作原理:PULL的解析方式与SAX解析类似,都是基于事件的模式。PULL提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据,与SAX不同的是,在PULL解析过程中触发相应的事件调用方法返回的是数字,且我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法从而执行代码。当解释到一个文档结束时,自动生成EndDocument事件。
- 优点:SAX的优点PULL都有,而且解析方法比SAX更加简单;
- 缺点:可拓展性差:无法对 XML 树内容结构进行任何修改。
适用于需要处理大型 XML 文档、性能要求较高、不需要对解析文档进行修改且不需要对解析文档多次访问的场合。