XML简记
一.王道和近道
先来做做DOM和JDOM的比较,在《用 JDOM 简化 XML 编程》中谈的非常好。
W3C DOM 设计的局限性:
语言独立。这点不是很明显,JDOM同样存在这种问题
严格的层次结构。在这里点上用DOM编程非常痛苦,繁琐的显式下拉,得出来的东西经常是Node类型的,要想遍历都得做强制转化,特别对子节点的遍历的时候,子节点的类型判定,会耗费你大量的精神。
接口驱动。 W3C做的东西都是接口,实际程序跑起来的时候,实现类都是通过工厂类得到的。
工厂类寻找实现DOM类的方法是这样的
FactoryFinder.find(
/* The default property name according to the JAXP spec */
"javax.xml.parsers.DocumentBuilderFactory",
/* The fallback implementation class name */
"org.apache.crimson.jaxp.DocumentBuilderFactoryImpl");
第一步.先从系统属性中找javax.xml.parsers.DocumentBuilderFactory对应的类名,找到实例化返回。
第二步.从$java.home/lib/xml.properties里面读javax.xml.parsers.DocumentBuilderFactory对应的类名,找到实例化返回。
第三步.上边两步都没有找到就从ClassPath中的META-INF/services/目录下找javax.xml.parsers.DocumentBuilderFactory文件里面的类名,实例化返回。
都没有,返回org.apache.crimson.jaxp.DocumentBuilderFactoryImpl的实例。
用DOM你不用管底层的实现,用JDK提供给你的接口和抽象类编程就行了。如果在你引入的包中没有DOM的实现的话,JDK用自带的org.apache.crimson的东东,去实现DOM。
DOM的优点就是它是XML的标准,标准的意思就是通用,他不需要你担心底层实现和环境配置不需要引入特殊的包,在作系统迁移或环境移植的时候不用作特殊的配置。但是说起编程的容易性来说,还是用JDOM,DOM4J要来得容易多了。
JDOM 是 Java 平台专用的。只要有可能,API 都使用 Java 语言的内建 String 支持,因此文本值也适用于 String。它还可利用 Java 2 平台的类集,如 List 和 Iterator,给程序员提供了一个丰富的并且和 Java 语言类似的环境。
没有层次性。在 JDOM 中,XML 元素就是 Element 的实例,XML 属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。由于在 XML 中所有这些都代表了不同的概念,因此它们总是作为自己的类型被引用,而不是作为一个含糊的“结点”。
类驱动。因为 JDOM 对象就是像 Document、Element 和 Attribute 这些类的直接实例,因此创建一个新 JDOM 对象就如在 Java 语言中使用 new 操作符一样容易。它还意味着不需要进行工厂化接口配置 -- JDOM 的使用是直截了当的。
但是JDOM有他的优点也有他的缺点,你所有的操作都是基于类的,可移植性不如DOM,在JDOM版本升级,或者系统移植的时候,你本身代码改动可能性比较大一点。
二.JDK内带的XML操作库
JDK自己带了org.apache的xalan和org.apache的crimson。Crimson是DOM的一个实现版本,Xalan是XSL Transformations (XSLT)的一个实现。用这些东西几乎可以完成xml的所有操作了。
参考链接:
Java?中的?XML的用法
http://bbs.xml.org.cn/dispbbs.asp?boardID=41&ID=8710
用 JDOM 简化 XML 编程
http://www-900.ibm.com/developerWorks/cn/java/j-jdom/index.shtml
用JDOM处理XML文档
http://www.chinaunix.net/jh/26/15908.html
技巧:从 JDOM 转换
http://www-900.ibm.com/developerWorks/cn/xml/tips/x-tipcjdm/index.shtml