在Java 中有多种方式可以对XML进行操作,其中以 DOM 和 SAX 为主要方式,他们也存在不同的特性。
DOM XML 解析
DOM (Document Object Model) 是最简单的Java XML 解析器。 它解析整个XML文档并将其加载到内存中,使用Object对其进行建模,以便轻松进行节点遍历。 DOM解析器缓慢,如果加载包含大量数据的XML文档,则消耗大量内存。
由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。
使用DOM方式来创建文件
Java XML DOM 创建XML文件
使用DOM方式来修改文件,主要包括修改id属性的值,添加一个address节点,删除age节点,同时更新performance节点的值。
Java XML DOM 修改XML文件
使用DOM方式来读取文件
Java XML DOM 读取XML文件
SAX XML 解析
SAX (Simple API for XML) 解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。它不会将任何XML文档加载到内存中并创建XML文档的一些对象表示。 相反,SAX解析器使用回调函数(org.xml.sax.helpers.DefaultHandler)通知客户端XML文档结构。
实现SAX了的解析器拥有事件驱动式的API,并像流读取器那样工作。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括:
XML 文字 节点 <– (Text nodes) –>
XML 元素 节点 <– (Element nodes) –>
XML 处理指令 <– (Processing Instructions) –>
XML 注释 <– (Comments) –>
事件在遇到任一XML特性时触发,以及遇到他们结尾时再次触发。XML属性也作为传给元素事件资料的一部分。
SAX运行时是单向的;解析过的资料无法在不重新开始的情况下再次读取。
因为SAX事件驱动的本质,所以处理文件通常会比DOM风格的解析器快。