易截截图软件、单文件、免安装、纯绿色、仅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代码构建一个线程池

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

Using Google is AJAX Search API with Java ...

http://www.ajaxlines.com/ajax/stuff/article/using_google_is_ajax_search_api_with_java.php
I was rather depressed over a year ago when Google deprecated their SOAP Search API with their AJAX Search API. Essentially Google was saying that they didn want anyone programmatically accessing Google search ......

java(Web)中相对路径,绝对路径问题总结

1.基本概念的理解
  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个
URL绝对路径。
  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在 ......

Java clone机制

1、 Java对象赋值
Java代码
Employee e1=
new
 Employee(
"李"
); 
//Employee是一个自定义类 
  
Employee e2=e1; //赋值对象 
  
e2.setName("王"
);
//改变对象e2的名字 
  
System.out.println(e1.getName ......

JAVA中的传递都是值传递吗?有没有引用传递呢?

JAVA中的传递都是值传递吗?有没有引用传递呢?
在回答这两个问题前,让我们首先来看一段代码:
Java代码
public class ParamTest {
// 初始值为0
protected int num = 0;
// 为方法参数重新赋值
public void change(int i) {
i = 5;
}
// 为方法参数重新赋值
public void change(ParamTest t) {
P ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号