XML总结_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > XML总结

XML总结

 2010/9/19 22:57:35  七月先知  http://igoder.javaeye.com  我要评论(0)
  • 摘要:对java的xml做些总结,如有不当之处,欢迎指点。以下均为针对sun的jdk。SUN在JDK1.4中引入xml标准接口。XML标准:JAXP(JavaAPIforXMLProcessing)JAXPAPI:javax.xml.parsers包XML解析方式:SAX,DOM,STAXDOMAPI:org.w3c.dom(DocumentObjectModel)SAXAPI:org.xml.sax(SimpleAPIforXML)STAXAPI:javax.xml.stream
  • 标签:XML总结
对java的xml做些总结,如有不当之处,欢迎指点。

以下均为针对sun的jdk。
SUN在JDK1.4中引入xml标准接口
XML标准:JAXP(Java API for XML Processing)
JAXP API: javax.xml.parsers包

XML解析方式:SAX,DOM,STAX
  DOM API: org.w3c.dom (Document Object Model)
  SAX API: org.xml.sax (Simple API for XML)
  STAX API: javax.xml.stream (Stream API for XML)
  事实上org.w3c.dom包是参考了w3c标准,它也属于JAXP规范的一部分。 

DOM:DOM有很多种解释。
1,从web展示的角度讲,DOM是一种文档对象模型,即对某种文档(如html,xml)的表现方式,通过浏览器或别的编程语言可以实现这种模型(通常是以树的结构形式存在于内存中),然后使用相关脚本或语言来操作具体的实现模型,从而实现对该模型代表的文档的操作。比如浏览器实现了DOM模型,该DOM模型以树的数据结构来表示html文档,其中树节点为html文档中的节点,使用js操作该DOM树即可实现对html文档的访问和操作。
2,从文档解析的角度来讲,DOM是对xml的一种解析方式。在java中,有三种解析方式,即上面提到的三种解析。

DOM解析:将xml以树结构的方式一次性加载进内存,易用,修改方便,但是更占内存。一般情况下用它即可应付大多数应用。
SAX解析:基于推模式的事件的方式来解析xml,较少占用内存,速度比DOM解析更快,适应于大文件。
STAX解析:基于拉模式的事件流的方式来解析xml,在3种解析方式中速度是最快的,可操作性也是最好的。

解析框架:Xerces , Crimson,JDOM,DOM4J
  Xerces和Crimson都实现了DOM和SAX,即在框架内部都有DOM和SAX的解析器。
  Crimson来自于Sun捐赠给Apache的ProjectX项目,Xerces来自IBM捐赠给Apache的XML4J项目。Xerces性能优于Crimson。
 
  JDOM 的目的是成为 Java 特定文档模型,它简化与 XML 的交互并且比使用 DOM 实现更快。底层通常使用 SAX2 解析器。JDOM 仅使用具体类而不使用接口。
  DOM4J是 JDOM 的一种智能分支,使用接口和抽象基本类方法。集成XPath等特性。速度比JDOM要快。
  目前许多开源项目中大量采用 DOM4J,例如Hibernate 。如果不考虑可移植性,那就采用DOM4J吧! 

以上几种api与框架关系的说明:
JAXP只是一个规范,其API内部默认具体实现还是依赖DOM和SAX的API,
而DOM和SAX的API的具体实现在1.6版本以前为Crimson,在1.6版本时更换为性能更好的Xerces。这源于sun和ibm之间的一些恩怨。
从jdk源码看出,在1.4版本中为:
javax.xml.parsers.SAXParserFactory{
public static SAXParserFactory newInstance(){
            return (SAXParserFactory) FactoryFinder.find(
                "javax.xml.parsers.SAXParserFactory",
                "org.apache.crimson.jaxp.SAXParserFactoryImpl");
        }
}


在1.6版本中为:
javax.xml.parsers.SAXParserFactory{
public static SAXParserFactory newInstance(){
            return (SAXParserFactory) FactoryFinder.find(
                "javax.xml.parsers.SAXParserFactory",
                "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");
        }
}


而当我们使用JAXP提供的xml处理接口的时候,是不需要知道其底层是如何实现的。



xml系列参考:
http://www.ibm.com/developerworks/cn/xml/theme/x-java.html


------------------

html 解析:
1,HTML Parser:速度快,便于分析dom树。一般情况用这个就够用了。
2,nekohtml:功能大而全,速度相对要慢。方便分析js脚本。

3,HtmlCleaner:将html转化为xml。

-------------------
xml的转化:
1,XStream:实现javabean和xml的相互转化。
2,XSL:将xml转化为html

  • 相关文章
发表评论
用户名: 匿名