易截截图软件、单文件、免安装、纯绿色、仅160KB

Java三种方式解析xml


Java里边解析xml一般有三种常用的技术:
1、 Document Object Model (DOM),W3C里边一种成熟的标准。目前广泛使用的解析工具:JDOM DOM4J
2、 Simple API for XML (SAX),第一种被广泛接受的XML的API,成为事实上的标准。
3、 Streaming API for XML (StAX),在JSR-173中提到的一种很有前途的新型解析模型。
DOM解析是基于树结构的,它通过在内存构建整棵文档树,允许完全、动态访问XML文档的任何节点。在XMPP应用中,如果使用dom解析xml,会耗费很多时间,增加请求返回的时间。
2、SAX
SAX解析XML采用事件驱动的方式。虽然并不是W3C的标准,但它的API是公认的,很多解析器都是基于它的。当SAX解析器读取文档的时候会引发很多事件,这些事件会交给对应的事件处理者(event
handlers),控制权是在解析器,应用程序只是时间的接收者,由解析器调用应用程序注册的callback接口实现事件通知。三种基本的事件:
1. DTDHandler 访问XML的DTD内容
2. ErrorHandler 解析错误
3. ContentHandler 访问文档的内容
3、 StAX
StAX是一种令人振奋的新型解析技术,和SAX一样,它也采用了事件驱动模型。不过,在对于事件的处理上,SAX采用了“推模式”(push modal),而StAX则使用的是“拉模式”(pull model)。说得更加明白一些,就是这样:
SAX是自己按顺序把整个文档解析完,在它解析的过程,会主动产生事件交给程序中相应的处理函数来处理当前内容;而StAX是由程序来驱动整个解析过程,只有当程序发出解析请求的时候,解析器才会告诉相应的事件,然后程序根据事件再决定如何处理当前内容,应用程序可以将
事件对应的节点DOM载入内存中进行处理。
从这个原理来判断的话,StAX的实现显然要更加灵活,程序可以选择自己需要处理的部分,而SAX则一定会遍历整个文档。而据我的理解,将StAX叫成“程序驱动模型”可能更利于理解一些。
读取XML文档:
Iterator xml:方便的、容易使用的、迭代器风格的 API。更面向对象编程,对程序感兴趣的事件创建相应的对象,容易添加和删除事件event,易用扩展。
 
 
Cursor xml:
尽管迭代器风格的 API 非常方便和易于使用,它也带来了一些开销。解析器需要创建事件对象,这些对象在以后被无用单元收集器回收。对于高性能极其重要的应用程序(如J2ME),您可以选择基于指针的
API。XMLStreamReader 


相关文档:

100行Java代码构建一个线程池

在现代的操作系统中,有一个很重要的概念――线程,几乎所有目前流行的操作系统都支持线程,线程来源于操作系统中进程的概念,进程有自己的虚拟地址空间以及正文段、数据段及堆栈,而且各自占有不同的系统资源(例如文件、环境变量等等)。与此不同,线程不能单独存在,它依附于进程,只能由进程派生。如果一个进程派生出了 ......

JAVA培训题库 Servlet

1.Servlet程序的入口点是:( )
A  init() 
B  main() 
C  service() 
D  doGet()
参考答案:A
2. Severlet中,HttpSeverletResponse的什么方法用来把一个HTTP请求重定向到另外的URL?( )
A  sendURL()
B  redirectURL()
C  sendRedirect()
D ......

JAVA培训题库 Struts

1. Struts体系结构实现了MVC设计模式的概念,那么它将以下选项中给出的什么分别映射为web应用中的组件?( )
A  View
B  Model
C  ActionServlet
D  Action
E  ActionMapping
F  Controller
参考答案:ABF
2. 在Struts体系结构中,以下哪个由代表系统状态和商业逻辑的Action来构建 ......

JAVA 培训题库 Spring

一、Spring基础知识及IOC_选择题
1. 下面关于spring描述错误的是:( )
A  Spring支持可插入的事务管理器,使事务划分更轻松,同时无需处理底层的问题。
B  Spring事务管理的通用抽象层还包括JTA策略和一个JDBC DataSource。
C  与JTA或EJB CMT一样,Spring的事务支持依赖于Java EE环境。
D  Spr ......

Java clone机制

1、 Java对象赋值
Java代码
Employee e1=
new
 Employee(
"李"
); 
//Employee是一个自定义类 
  
Employee e2=e1; //赋值对象 
  
e2.setName("王"
);
//改变对象e2的名字 
  
System.out.println(e1.getName ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号