下午看了一下dom和dom4j,感觉这两者在解析方面差不多,但是dom4j要比dom简单一些,在创建一个xml文件,dom4j要比dom简单太多了,毕竟人家都帮我们封装好了。
dom是不需要加包的,而dom4j要加一个dom4j-1.6.1.jar这个包。具体的下载路径是:http://www.dom4j.org/
下面我说一下这两者如何解析和创建,以及他们的区别。xml个人觉得是蛮重要的,因为它是可扩展的,怎么说呢,xml也许会代替html。
dom的解析的代码如下:
这个只是解析到第二层,接下去的解析与第二层的解析是一样的。。我简单的说一下步骤吧:
首先创建一个document工厂,通过工厂来得到DocumentBuilder ,再由builder来得到document。builder.parse(file)可以得到一个file文件,同时丢出ParserConfigurationException这个异常。
xml的解析、创建都是基于这个document的,在创建一个xml也是同样的方法,要先创建一个document。
再接下来通过document得到一系列的子结点,NodeList与List还是有所区别的,在list里面有一个iterator,但是遍历NodeList只能用for循环。在list里面得到元素,是用list.get(i),而NodeList是list.item(i)拿到子元素。接下来就是判断子元素里面是不是还有子元素。
dom4j的解析的代码如下:
它与dom的区别在于没有工厂了,直接用SAXReader这个类来得到document。其他的和dom的解析是没啥区别的。。大家可以把SAXReader理解成为io里面的FileReader,其实都是一样的。。然后通过.read(file)方法来得到document。
dom的创建xml的代码如下:
前几步和dom解析是一样的,通过工厂一步步得到document。再通过document来创建元素,创建的元素可以给他们增加属性,即setAttribute()。
student.setIdAttribute("id", true);把这个setIdAttribute设置为true起到的作用是可以在解析时通过document.getElementById,默认为false,也就是说在没设置的情况下,解析通过byId是拿不到那个属性值的,这个和js里面的"document.getElementById()"还是有点区别的。
创建完属性,把他们的依赖关系注入,也是说谁是谁的上级。。
最后通过Transformer这个类把document的东西运到file里面去。。得到Transformer还是得用工厂,确实麻烦。。
dom4j的创建xml可要简单多了,它是借助了FileWriter写入文件。
代码如下:
它是通过DocumentHelper来得到document,再把file放到流里面,通过document.writer()方法,把document里面的东西放到file文件里面去。很是简单!
XML在未来会显得很重要,所以解析和创建变得很是重要。。在ajax里面,可以传一个xml过去,也可以传一个xml回来,当然这个例子我没写过,什么时候有时间了写一下。
下面推荐一篇dom4j解析的文章:http://www.java3z.com/cwbwebhome/article/article5/5828.html?id=1542
它里面封装了一个HashMap,把值都存放到hashmap里面去。。