温馨虫窝
给自己一个温馨的家
BlogJava
首页
新随笔
联系
聚合
管理
2 Posts :: 4 Stories :: 2 Comments :: 0 Trackbacks
公告
站长: 仙人掌
QQ:2180322
MSN:
访问量:
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
往事如风(2)
随笔档案
2005年2月 (2)
文章分类
C#
Hibernate
J2EE
Oracle
Others(1)
Spring
XML(3)
文章档案
2005年3月 (4)
相册
不当帅哥好多年
搜索
最新评论
1. re: 童年
呵呵,说起那个唐老师,我也想起来了,声音很粗的,她女儿后来去华东师范大学了...
--海哥
2. re: 童年
呵呵,说起那个唐老师,我也想起来了,声音很粗的,她女儿后来去华东师范大学了...
--海哥
阅读排行榜
1. 童年(247)
2. Blog开篇(212)
评论排行榜
1. 童年(2)
2. Blog开篇(0)
(转)从 DOM 转换
在本文中,您会了解如何将 DOM 结构转换成 SAX 和 JDOM,从而可以与不使用 DOM 的应用程序通信。本文列出的代码演示了如何从 DOM 转换到供 SAX 使用的输出流,以及如何从 DOM 到 JDOM 的转换。
如果您对 W3C 的 DOM(文档对象模型)感兴趣而且认为 SAX 很灵巧的话,那么您必须找出一种方法将 DOM 转换成应用程序开发人员使用的其它格式。当然,这些其它格式是指 SAX 和 JDOM。如果必须将 DOM 作为输入且要将它转换成其它格式时,要做什么?这当然是一个值得研究的问题。由于 DOM 提供了完整的文档表示,将它转换成另外一种格式当然是可行的。在本文中,您将了解如何执行从 DOM 到 SAX 或 JDOM 的转换。
从 DOM 到 SAX
遗憾的是,DOM 级别 1 和更新的级别 2 没有提供将 DOM 树输出成 SAX 或其它格式的方式。结果是每个语法分析器实现都提供了一组用于输出的定制 API,实现的独立性丧失了。换句话说,您的代码只能与那个为它编写的语法分析器一起工作(如 Crimson、Xerces 或 Oracle 等等)。DOM 级别 3 被认为是提供了这项功能,所以我们都必须静观 DOM 级别 3 能提供什么输出方法。同时,查看一下供应商提供的有关编写或串行化 DOM 树的文档。例如使用 Apache Xerces,需要使用如清单 1 中所示的 org.apache.xml.serialize.XMLSerializer 类。 在每一种情形,您将有可能必须以流的形式输出 DOM 树,然后将这个流交给 SAX 进行后续处理。请注意,清单 1 中仅显示了以流的形式输出 DOM 树;然后可以使用这个流作为 SAX 处理器的输入。
清单 1. 将 DOM 转换成输出流(供 SAX 使用)
import org.apache.xerces.parsers.DOMParser;
import org.apache.xml.serialize.XMLSerializer;
import org.xml.sax.InputSource;
import org.w3c.dom.Document;
public class PrintDOMTree {
public static void main(String[] args) {
try {
InputSource source = new InputSource(args[0]);
DOMParser parser = new DOMParser();
parser.parse(source);
Document doc = parser.getDocument();
XMLSerializer serializer = new XMLSerializer();
// Insert your PipedOutputStream here instead of System.out!
serializer.setOutputByteStream(System.out);
serializer.serialize(doc);
} catch (Exception e) {
e.printStackTrace();
}
}
}
从 DOM 到 JDOM
将 DOM 转换成 JDOM 要比将 DOM 转换成 SAX 简单。这事实上很有意义,因为您一旦有了 DOM 树,就有可能有机会从 SAX 处理数据。事实上,很少有 SAX 最优处理 DOM 树的情况,因为您通过 DOM 表示来将 XML 存储在内存里时,已经用尽了内存。更为常见的工作是把作为 DOM 树的 XML 文档转换成 JDOM 树。由于这些格式都是文档表示,但在行为和功能性方面有潜在的不同,所以您可能想让其他人用您的 DOM 树并将它当作 JDOM 进行处理。您可能认为这是他们的工作,但您需要知道(至少!)如何从您的结构转换成他们的结构。
对于将 DOM 转换成 JDOM,JDOM API 向用户提供了 DOM Node,称为 org.jdom.input.DOMBuilder。这个类接受 DOM Document(以及其它一些 DOM 结构,如 Element 和 Attr),并将 DOM 树转换成 JDOM Document。这个操作并不复杂,所以我在清单 2 中简单地显示了该代码,让您了解一下实际过程。
清单 2. 将 DOM 转换成 JDOM
//
Java imports
import java.io.IOException;
//
JDOM imports
import org.jdom.JDOMException;
import org.jdom.input.DOMBuilder;
import org.jdom.output.XMLOutputter;
//
SAX and DOM
import org.xml.sax.InputSource;
//
Xerces
import org.apache.xerces.parsers.DOMParser;
public
class
DOMtoJDOM
{
//
DOM tree of input document
org.w3c.dom.Document domDoc;
public
DOMtoJDOM(String systemID) throws Exception
{
DOMParser parser
=
new
DOMParser();
parser.parse(
new
InputSource(systemID));
domDoc
=
parser.getDocument();
}
public
org.jdom.Document convert()
throws JDOMException, IOException
{
//
Create new DOMBuilder, using default parser
DOMBuilder builder
=
new
DOMBuilder();
org.jdom.Document jdomDoc
=
builder.build(domDoc);
return
jdomDoc;
}
public
static
void
main(String[] args)
{
try
{
DOMtoJDOM tester
=
new
DOMtoJDOM(args[
0
]);
org.jdom.Document jdomDoc
=
tester.convert();
//
Output the document to System.out
XMLOutputter outputter
=
new
XMLOutputter();
outputter.output(jdomDoc, System.
out
);
}
catch
(Exception e)
{
e.printStackTrace();
}
}
}
没有别的要说了。一旦您知道如何从 DOM 移向 SAX 和 JDOM 之后,就可以解决任何您需要的输出格式并且能够处理您将遇到的许多类型的 XML 表示。静待 DOM 级别 3 规范,以了解对于以标准的且与供应商无关的方式输出 DOM 树的更改,到那时,您就可以尽情使用 DOM 了!
posted on 2005-03-01 14:45
温馨虫窝
阅读(174)
评论(0)
编辑
收藏
所属分类:
XML
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
(转自IBM)用 JDOM 简化 XML 编程
(转)从 DOM 转换
(转)Java语言编程中更新XML文档的常用方法
Powered by:
BlogJava
Copyright © 温馨虫窝