DOM文档操作和XML文件互相转换的java实现 (转贴)

dom|xml|转换

DOM文档操作和XML文件互相转换的java实现

[ 作者: 郭洪锋   添加时间: 2001-10-19 8:16:09 ]

郭洪锋 (ghf_email@sohu.com)

简介:该文简要描述了DOM的概念和内部逻辑结构,给出了DOM文档操作和XML文件互相转换的java实现过程。
1. DOM简介
目前,W3C已于2000年11月13日推出了规范DOM level 2。文档对象模型(DOM)是HTML和XML文档的编程接口规范,它与平台和语言是无关的,因而可以用各种语言在各种平台上实现。该模型定义了THML和XML文件在内存中的逻辑结构(即为文档),提供了访问、存取THML和XML文件的方法。利用DOM规范,可以实现DOM 文档和XML之间的相互转换,遍历、操作相应DOM文档的内容。可以说,要自由的操纵XML文件,就要用到DOM规范。

2. DOM内部逻辑结构
DOM文档中的逻辑结构可以用节点树的形式进行表述。通过对XML文件的解析处理,XML文件中的元素便转化为DOM文档中的节点对象。DOM的文档节点有Document、Element、Comment、Type等等节点类型,其中每一个DOM文档必须有一个Document节点,并且为节点树的根节点。它可以有子节点,或者叶子节点如Text节点、Comment节点等。任何的格式良好的XML文件中的每一个元素均有DOM文档中的一个节点类型与之对应。利用DOM接口将XML文件转化成DOM文档后,我们就可以自由的处理XML文件了。

3. java中的DOM接口
DOM规范提供的API的规范,目前Sun公司推出的jdk1.4测试版中的java API遵循了 DOM level 2 Core推荐接口的语义说明,提供了相应的java语言的实现。

在org.xml.dom中,jkd1.4提供了Document、DocumentType、Node、NodeList、Element、Text等接口,这些接口均是访问DOM文档所必须的。我们可以利用这些接口创建、遍历、修改DOM文档。

在javax.xml.parsers中,jkd1.4提供的DoumentBuilder和DocumentBuilderFactory组合可以对XML文件进行解析,转换成DOM文档。

在javax.xml.transform.dom和javax.xml.transform.stream中,jdk1.4提供了DOMSource类和StreamSource类,可以用来将更新后的DOM文档写入生成的XML文件中。

4. 例程

4.1 将XML文件转化成DOM文档
这个过程是获得一个XML文件解析器,解析XML文件转化成DOM文档的过程。

Jdk1.4中,Document接口描述了对应于整个XML文件的文档树,提供了对文档数据的访问,是该步骤的目标。Document接口可以从类DocumentBuilder中获取,该类包含了从XML文档获得DOM文档实例的API。XML的解析器可以从类DocumentBuilderFactory中获取。在jdk1.4中,XML文件转化成DOM文档可以有如下代码实现:
//获得一个XML文件的解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//解析XML文件生成DOM文档的接口类,以便访问DOM。
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse( new File(FileName) );

4.2 遍历DOM文档
获得接口类document实例后,可以对DOM的文档树进行访问。要遍历DOM文档,首先要获得Root元素。然后获得Root元素的子节点列表。这里通过递归的方法实现遍历的目的。

//获得Root元素
Element element = document.getDocumentElement();
//获得Root元素的子节点列表
nodelist = element.getChildNodes();
//用递归方法实现DOM文档的遍历
GetElement(nodelist);
其中GetElement方法实现如下:
public void GetElement(NodeList nodelist){
Node cnode;
int i,len;
String str;

if(nodelist.getLength() == 0){
// 该节点没有子节点
return;
}
for(i=0;i 1)
System.out.println("      "+str+" "+len);
}
}
}

注意:上面的代码只是显示Node类型和Text类型的对象。它们的类型标识分别是1和3。

4.3 修改DOM文档
修改DOM文档的API在DOM level 2 Core规范中做了说明,jkd1.4中的org.xml.dom中实现了这些API。修改DOM文档操作主要集中在Document、Element、Node、Text等类中,这里给出的例子中是在解析出的DOM文档中增加一系列对象,对应与在XML文件中增加一条记录。
// 获得Root对象
Element root = document.getDocumentElement();
// 在DOM文档中增加一个Element节点
Element booktype = document.createElement("COMPUTES");
//将该节点转化成root对象的子节点
root.appendChild(cdrom);
//在DOM文档中增加一个Element节点
Element booktitle = document.createElement("Title");
//将该节点转化成booktype对象的子节点
booktype.appendChild(booktitle);
//在DOM文档中增加一个Text节点
Text bookname = document.createTextNode("understand Corba");
//将该节点转化成bookname对象的子节点
booktitle.appendChild(bookname);

4.4 将DOM文档转化成XML文件
// 获得将DOM文档转化为XML文件的转换器,在jdk1.4中,有类TransformerFactory
// 来实现,类Transformer实现转化API。
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer();
// 将DOM对象转化为DOMSource类对象,该对象表现为转化成别的表达形式的信息容器。

DOMSource source = new DOMSource(document);
// 获得一个StreamResult类对象,该对象是DOM文档转化成的其他形式的文档的容器,可以是XML文件,文本文件,HTML文件。这里为一个XML文件。
StreamResult result = new StreamResult(new File(“text.xml”));
// 调用API,将DOM文档转化成XML文件。
transformer.transform(source,result);

这里提供了该例程的完整程序,该例程在windows 2000中jdk1.4环境中运行通过。

以上给出了一个例子,读者可以从中了解到对DOM操作的思路。因为对DOM的操作均遵循了DOM规范,所以也适用于其它语言对DOM的处理。

参考资料:

http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-2000-1113
Java 2 Platform, Standard Edition, V1.4.0 API Specificaion

关于作者
郭洪锋:主要从事UNIX系统下分布式应用的开发和研究。您可以通过电子邮件ghf_email@sohu.com 和他联系。

时间: 2024-08-03 21:14:49

DOM文档操作和XML文件互相转换的java实现 (转贴)的相关文章

Java实现DOM文档操作和XML文件互相转换

dom|xml|转换 本文简要描述了DOM的概念和内部逻辑结构,实例讲述DOM文档操作和XML文件互相转换的java实现过程. 1. DOM简介 目前,W3C已于2000年11月13日推出了规范DOM level 2.文档对象模型(DOM)是HTML和XML文档的编程接口规范,它与平台和语言是无关的,因而可以用各种语言在各种平台上实现.该模型定义了THML和XML文件在内存中的逻辑结构(即为文档),提供了访问.存取THML和XML文件的方法.利用DOM规范,可以实现DOM 文档和XML之间的相互

XML文档操作之JAXP下实现

JAXP是java API for xml PRocessing的缩写. 其API可以在javax.xml.parsers 这个包中找到.这个包向用户提供了两个最重要的工厂类,SAXParserFactory 和DocumentBuilderFactory,我们可以通过这两个类实现之后对XML文件的操作.作为一个xml的解析器,w3c组织官方推荐使用Dom(Document Object Model 文档对象模型)方式进行解析,但是实际上的社区标准是SAX(Simple API For XML)

JDOM操作XML文档高级篇XML验证,创建带名字空间的xml, xml文档的修改

下面我通过几个例子来实现JDOM来操作XML文档: 1. xml文档的验证 DTD   我们经常使用XML来验证文档的合法性.  我们需要在xml的开头引入  <!DOCTYPE rootName SYSTEM "xxx.dtd">   这里的PUBLIC 引入的是私有DTD也就是我们自己定义的 .我们平时使用这种即可 . 另一种是   <!DOCTYPE rootName PUBLIC  ".........">这个是ISO标准的DTD 

详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)_实用技巧

在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文档操作的需求,开发者较多的会使用到微软自行提供的插件,在一定程度上简化了开发人员的工作量,但是同时也给用户带来了一些困扰,例如需要安装庞大的office,在用户体验性就会降低很多,并且在国内,很多人都还是使用wps,这就导致一部分只安装了wps的使用者很是为难,在对Excel的操作方面,有一个NPO

.NET中开源文档操作组件DocX的介绍与使用_基础应用

前言 相信大家应该都有所体会,在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文档操作的需求,开发者较多的会使用到微软自行提供的插件,在一定程度上简化了开发人员的工作量,但是同时也给用户带来了一些困扰,例如需要安装庞大的office,在用户体验性就会降低很多,并且在国内,很多人都还是使用wps,这就导致一部分只安装了wps的使用者很是为难,在对Ex

从 VBA 中使用 Visual Basic .NET 将 Word 文档序列化为 XML

visual|word|xml 从 VBA 中使用 Visual Basic .NET 将 Word 文档序列化为 XML Michael CorningMicrosoft Corporation 2002年10月 适用于:   Microsoft Word 2002   Microsoft Visual Studio .NET 摘要:学习如何在 Microsoft Office Visual Basic for Applications (VBA) 程序中利用 .NET 代码将大型 Word

如何打印Word 2013文档中的XML标记

在Word2013文档中,通过启用打印XML标记功能,可以在打印XML文档时打印XML标记.启用打印XML标记的步骤如下所述: 第1步,打开Word2013文档窗口,依次单击"文件"→"选项"命令,如图2013041905所示. 图2013041905 选择"选项"命令 第2步,打开"Word选项"对话框,切换到"高级"选项卡.在"打印"区域选中"打印XML标记"复选

在Word 2010文档中打印XML标记

在Word 2010文档中,通过启用打印XML标记功能,可以在打印XML文档时打印XML标记.启用打印XML标记的步骤如下所述: 第1步,打开Word 2010文档窗口,依次单击"文件"→"选项"命令,如图2011121303所示. 图2011121303 选 择"选项"命令 第2步,打开"Word选项"对话框,切换到"高级"选项卡.在"打印"区域选中" 打印XML标记&quo

如何在word文档中插入txt文件的方法教程

  现如今大家使用电脑办公时最常用到的想必是office软件,非常方便且容易使用.office软件中最常用的又是对word文档的编辑,其中包含各种功能,对于普通使用者绰绰有余,且都能快速掌握.但是大家真的认为word文档真的如想象中那样很容易操作吗?其实小编告诉大家word文档中还有很多功能使我们所不知道的,那今天小编就来介绍win系统word文档中如何插入txt文件作为附件.但一如word文档操作简单,这项操作也不会太难,只有几个步骤而已,大家一起来看看吧! 1.打开word程序,点击窗口上方