`
isiqi
  • 浏览: 16559817 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

XML From IBM Developer works

阅读更多

XML From IBM Developer works<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

简介:该文简要描述了DOM的概念和内部逻辑结构,给出了DOM文档操作和XML文件互相转换的java实现过程。郭洪锋:主要从事UNIX系统下分布式应用的开发和研究。您可以通过电子邮件ghf_email@sohu.com 和他联系

1. DOM简介
目前,W<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="3" unitname="C">3C</chmetcnv>已于<chsdate w:st="on" isrocdate="False" islunardate="False" day="13" month="11" year="2000"><span lang="EN-US">2000</span>年<span lang="EN-US">11</span>月<span lang="EN-US">13</span>日</chsdate>推出了规范DOM level 2。文档对象模型(DOM)是HTMLXML文档的编程接口规范,它与平台和语言是无关的,因而可以用各种语言在各种平台上实现。该模型定义了THMLXML文件在内存中的逻辑结构(即为文档),提供了访问、存取THMLXML文件的方法。利用DOM规范,可以实现DOM 文档和XML之间的相互转换,遍历、操作相应DOM文档的内容。可以说,要自由的操纵XML文件,就要用到DOM规范。

2. DOM内部逻辑结构
DOM
文档中的逻辑结构可以用节点树的形式进行表述。通过对XML文件的解析处理,XML文件中的元素便转化为DOM文档中的节点对象。DOM的文档节点有DocumentElementCommentType等等节点类型,其中每一个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文档实例的APIXML的解析器可以从类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类型的对象。它们的类型标识分别是13

4.3 修改DOM文档
修改DOM文档的API在DOM level 2 Core规范中做了说明,jkd1.4中的org.xml.dom中实现了这些API。
修改DOM文档操作主要集中在DocumentElementNodeText等类中,这里给出的例子中是在解析出的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 2000jdk1.4环境中运行通过。

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

参考资料:

1. http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-2000-1113

这是篇细探 JAXPSun Java API for XML 的文章,帮助解除了有关 JAXP 本质和服务目的的疑惑。本文讲解了 JAXP 的基本概念,演示 XML 语法分析为什么需要 JAXP,并显示如何轻易更改 JAXP 使用的语法分析器。本文还进一步讲述了 SAX DOM 这两个流行的与 JAXP 相关的 Java XML API

Java XML 在每一个技术领域都制造了新闻,并且对于软件开发人员来说,似乎是 1999 年和 2000 年最重要的发展。结果,Java XML API 的数量激增。其中两个最流行的 DOM SAX 还引起极大兴趣,而 JDOM 和数据绑定 API 也接踵而来。只透彻理解这些技术中的一个或两个就是一项艰巨任务,而正确使用所有这些技术就会使您成为专家。但在去年,另一个 API 给人留下了深刻印象,它就是 Sun Java API for XML,通常称为 JAXP。如果考虑到 Sun 在其平台上还没有任何特定于 XML 的产品,那么这个进展就不足为奇。而令人惊奇的是人们对 JAXP 了解的缺乏。多数使用它的开发人员在他们所用的这个 API 的概念理解上都有错误。

什么是 JAXP
本文假设您有 SAX DOM 的基本知识。这里实在没有足够篇幅来解释 SAXDOM JAXP。如果您是 XML 语法分析的新手,那么可能要通过联机资源阅读 SAX DOM,或者浏览我的书。(参考资源一节中有至 API 和我的书的链接。)获得基本知识后再看本文会比较好。

API 还是抽象?
在讲解代码之前,介绍一些基本概念很重要。严格地说,JAXP API,但是将其称为抽象层更准确。它不提供处理 XML 的新方式,不补充 SAX DOM,也不向 Java XML 处理提供新功能。(如果在这点上理解有误,则本文正好适合您!)它只是使通过 DOM SAX 处理一些困难任务更容易。如果在使用 DOM SAX API 时遇到特定于供应商的任务,它还使通过独立于供应商的方式处理这些任务成为可能。

虽然要分别讲述所有这些特性,但是真正需要掌握的是:JAXP 不提供语法分析功能!没有 SAXDOM 或另一个 XML 语法分析 API,就无法分析 XML 语法。有很多人曾让我将 DOMSAX JDOM JAXP 进行对比。但进行这些对比是不可能的,因为前三个 API JAXP 的目的完全不同。SAXDOM JDOM 都分析 XML 语法。而 JAXP 却提供到达这些语法分析器和结果的方式。它自身不提供分析文档语法的新方法。如果要正确使用 JAXP,则一定要弄清这点。这将使您比其它 XML 开发人员领先一大截。

如果仍然怀疑(或认为我故弄玄虚),请从 Sun Web 站点下载 JAXP 分发(请参阅参考资料一节),然后就会知道基本 JAXP 是什么。在包括的 jar (jaxp.jar) 只有六个类!这个 API 会有多难哪?所有这些类(javax.xml.parsers 包的一部分)都位于现有语法分析器之上。这些类中的两个还用于错误处理。JAXP 比人们想象的要简单得多。那么,为什么还感到困惑哪?

Sun JAXP Sun 的语法分析器
JAXP
下载时包括 Sun 的语法分析器。所有 parser 器类作为 com.sun.xml.parser 包和相关子包的一部分位于 parser.jar 档案中。应该知道,该语法分析器(代码名为 Crimson JAXP 自身的一部分。它是 JAXP 版本的一部分,但不是 JAXP API 的一部分。令人困惑吗?有一点。换这种方式想想:JDOM Apache Xerces 语法分析器一起提供。该语法分析器不是 JDOM 的一部分,但由 JDOM 使用,所以包括它,以确保 JDOM 可以单独使用。JAXP 也是如此,但不象 JDOM 那样好表达:JAXP Sun 的语法分析器一起提供,以便可以立即使用。但是,很多人将 Sun 的语法分析器中包括的类当成 JAXP API 的一部分。例如,新闻组中一个常见的问题是:“怎样使用 JAXP 中的 XMLDocument 类?其目的是什么?”这个答案可有些复杂。

首先,com.sun.xml.tree.XMLDocument 类不是 JAXP 的一部分。它是 Sun 语法分析器的一部分。所以,这个问题从一开始就给人以误导。其次,JAXP 的整个意义在于在处理语法分析器时提供供应商独立性。使用 JAXP 的同一代码可以与 Sun XML 语法分析器、Apache Xerces XML 语法分析器和 Oracle XML 语法分析器一起使用。而使用特定于 Sun 的类是个坏主意。这与 JAXP 的整个意义相背离。现在看出来这个问题怎样混淆概念了吗?语法分析器和 JAXP 发行版本(至少是 Sun 的版本)中的 API 被混为一谈,开发人员将其中一个的类和特性当成是另一个的了,反之亦然。

旧和新
关于 JAXP,最后需要指出的是:使用 JAXP 有一些缺陷。例如,JAXP 只支持 SAX 1.0 DOM 第一层规范。SAX 2.0 2000 5 月起就完成,DOM 第二层规范支持甚至在大多数语法分析器中存在更长时间。DOM 第二层规范还没有完成,但确实足够稳定以用于生产。这两个 API 的新版本都有重大改进,最明显的是对 XML 名称空间的支持。该支持还允许“XML Schema 确认”,这个与 XML 相关的另一热门技术。公平地说,当 JAXP 发布 1.0 最终发行版时,SAX 2.0 DOM 第一层规范都还没有完成。但是,由于没有包括这些新版本,确实为开发人员带来很大不便。

还可以使用 JAXP,但是也可以等待 JAXP 1.1,它支持 SAX 2.0 DOM第二层规范 。否则,将发现,JAXP 提供的优点以 SAX DOM 最新版本中的功能为代价,并使应用程序更加难以编码。无论是否等待下一个 JAXP 发行版,都要留意这个问题。如果将 JAXP 与语法分析器一起使用,而语法分析器支持的 DOM SAX 版本比 JAXP 支持的要高,则可能会有类路径问题。所以,事先留意一下,并且,一旦有 JAXP 1.1,马上升级。基本理解 JAXP 之后,让我们看一下 JAXP 依赖的 APISAX DOM

SAX 开始
SAX
Simple API for XML)是用于处理 XML 的事件驱动方法。它基本由许多回调函数组成。例如,每当 SAX 语法分析器遇到元素的开始标记时就调用 startElement()。对于字符串,将调用 characters() 回调函数,然后在元素结束标记处调用 endElement()。还有很多回调函数用于文档处理、错误和其它词汇结构。现在知道这是怎么回事了。SAX 程序员实现一个定义这些回调函数的 SAX 接口。SAX 还实现一个名为 HandlerBase 的类,该类实现所有这些回调函数,并提供所有这些回调方法的缺省空实现。(提到这一点是因为它在后面讲到的 DOM 中很重要。)SAX 开发人员只需扩展这个类,然后实现需要插入特定逻辑的方法。所以,SAX 的关键在于为这些不同的回调函数提供代码,然后允许语法分析器在适当的时候触发这些回调函数中的每一个。

因此,典型的 SAX 过程如下:

  • 用特定供应商的语法分析器实现创建一个 SAXParser 实例

  • 注册回调实现(例如,通过使用扩展 HandlerBase 的类)

  • 开始进行语法分析,然后在触发回调实现时等待

JAXP SAX 组件提供执行所有这些步骤的简单方式。如果没有 JAXPSAX 语法分析器要直接从供应商类(如 org.apache.xerces.parsers.SAXParser)进行实例化,或者必须使用名为 ParserFactory 的帮助类。第一个方法的问题很明显:不独立于供应商。第二个方法的问题在于类厂需要一个自变量,即要使用的语法分析器类的字符串名称(还是那个 Apache org.apache.xerces.parsers.SAXParser)。可以通过将不同语法分析器作为font-size: 9pt; font-family: helvetica,helv,a

分享到:
评论

相关推荐

    XML IBM教程 v01

    ### XML IBM教程 v01 知识点概览 #### 一、课程介绍与目标概述 本教程由IBM提供,是一门专为Java程序员设计的深入学习XML及其相关技术的课程。通过本教程的学习,参与者将能够掌握XML的基础知识及一系列重要的衍生...

    XML.NET Web developer's guide

    《XML.NET Web developer's guide》是一本专为.NET平台上的Web开发者设计的指南,它深入浅出地介绍了如何利用XML技术进行Web应用开发。XML(eXtensible Markup Language)是一种用于标记数据的语言,它的核心目标是...

    IBM官方对XML的讲解

    IBM作为全球知名的科技巨头,其官方提供的XML讲解无疑是最权威且实用的学习资源之一。XML的设计目标是为了传输和存储数据,而非显示数据,这与HTML(超文本标记语言)主要用于网页展示有着本质的区别。 XML的核心...

    IBM XML入门教程

    IBM作为一家全球知名的科技公司,提供了丰富的XML学习资源,帮助初学者理解并掌握这一重要技术。 XML的核心特性包括: 1. **可扩展性**:XML允许用户自定义标签,以适应各种特定的数据结构需求,这是它区别于HTML...

    IBM XML模拟题

    根据提供的信息,我们可以总结出以下关于IBM XML模拟题的相关知识点: ### 1. W3C DOM Core 接口定义 W3C DOM (Document Object Model) Core 接口定义了一个最小集,用于访问和操作文档对象。选项 A 正确地指出了...

    xml.rar_solidworks xml

    在SolidWorks中,XML文件被用来存储各种类型的数据,如工程图、零部件或装配体的配置信息,以及用户自定义的属性等。当你从SolidWorks中导出或提取.xml文件时,这些文件通常包含了丰富的设计信息,方便与其他软件...

    ibm xml java解析

    6. **IBM的XML扩展**:IBM作为Java的重要贡献者,其JDK可能包含了一些特定的XML处理扩展,如性能优化或额外的功能。不过,具体特性需要查阅IBM官方文档了解。 在提供的文件列表中,尽管没有XML解析相关的代码或文档...

    Oracle XML DB Developer's Guide

    Oracle XML DB Developer's Guide 是一份由Oracle公司官方发布的指南,它为开发者提供了在Oracle数据库中加载、存储、生成、操作、管理、访问和查询XML数据的指导和示例。这份文档是Oracle XML DB 10g Release 2版本...

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    User user = (User) xstream.fromXML(bais); ``` 这样,XML字符串就会被转换回User对象。 XStream还提供了许多高级功能,比如自定义转换器来改变默认的XML表示,或者处理复杂的继承关系。此外,为了提高安全性...

    XML Developer's Guide.pdf

    ### XML Developer's Guide知识点概述 #### 一、文档简介与约定 - **文档目的**:本文档旨在为开发者提供关于XML及其在Borland JBuilder中的应用指南。 - **文档结构**:文档由多个章节组成,每个章节针对XML的不同...

    XML .NET Developer's Guide PDF + 源码

    《XML .NET Developer's Guide》是一本专门为.NET开发者设计的指南,它深入探讨了XML在.NET框架中的使用和开发技术。这本书结合了理论知识与实际源码,为读者提供了全面的学习资源,帮助开发者掌握XML的解析、创建、...

    Rational Application Developer programmer

    标题与描述中的关键词“Rational Application Developer programmer”指向了IBM Rational Application Developer(RAD)这款集成开发环境(IDE),主要用于构建企业级应用,如Java、Web、XML、数据库、EJB、Struts、...

    ibm redbook xml341

    IBM Redbook XM341是一门专注于XML编程和相关技术的课程,旨在为学习者提供扎实的理论基础和实际操作技能。通过该课程,参与者可以掌握XML的核心概念,了解并熟练运用XML处理、转换和展示的各种工具,以及在Web服务...

    ibm 2010 面试题(uml转xml)

    标题中的“ibm 2010 面试题(uml转xml)”是指IBM公司在2010年面试中提出的一个技术问题,涉及到将统一建模语言(UML)模型转换为可扩展标记语言(XML)的技能。UML是一种用于软件工程的图形化建模语言,而XML是一种...

    Oracle XML DB Developer's Guide 11g Release 2 (11.2)-956

    Oracle XML DB Developer's Guide 11g Release 2 (11.2) 是一本专为开发者设计的指南,旨在详细阐述如何在Oracle数据库中高效地处理XML数据。这本书由Drew Adams作为主要作者,众多其他专家共同贡献,涵盖了2002年至...

    Oracle XML Developer’s Kit – XDK

    Oracle XML Developer’s Kit (XDK) 是一组由Oracle公司提供的用于处理XML文档的工具集合,主要功能包括读取、操作、转换和展示XML数据。XDK支持多种编程语言,如C、PL/SQL、C++以及Java,为开发人员提供了在不同...

    ibm-jar.rar

    2. **XML解析**:IBM的JAR文件可能包含用于解析和生成XMI文档的类库。这些类库可能使用DOM(Document Object Model)、SAX(Simple API for XML)或StAX(Streaming API for XML)等解析技术。 3. **UML与XMI的映射...

    Oracle XML Developer's Kit Programmer's Guide 11g Release 2 (11

    Oracle XML Developer's Kit Programmer's Guide 11g Release 2 (11.2) 是一个重要的文档,旨在为开发者提供关于在Oracle环境中处理XML的详细指南。这份文档涵盖了Oracle公司提供的XML开发工具包的各项功能和用法,...

    IBM XML课件

    IBM作为全球领先的IT公司,提供了丰富的XML相关培训资源,旨在帮助学习者深入理解和掌握这一技术。在这个“IBM XML课件”中,你将获得一份详尽、丰富的学习资料,涵盖了XML的基础到高级应用。 XML的设计目标是传输...

    Oracle 9i XML Developer’s Kits Guide - XDK Release 2 (9.2)

    Oracle 9i XML Developer’s Kits Guide - XDK Release 2 (9.2) 是 Oracle 公司发布的一本关于 XML 开发者的指南,该指南详细介绍了 Oracle 9i XML 开发者套件的使用和实现。 Oracle 9i XML 开发者套件是 Oracle ...

Global site tag (gtag.js) - Google Analytics