当前位置:编程学习 > JSP >>

Java XML教程(1-3章)

答案:来源:http://d23xapp2.cn.ibm.com/developerWorks/education/xml/xmljava/tutorial/xmljava-1-1.html

第一章 入门介绍

关于本教程  
在本教程中,我们将讨论如何使用一个 XML 解析器来:
处理一个 XML 文档
创建一个 XML 文档
操作一个 XML 文档
我们也将讨论一些有用而不为众人所知的 XML 解析器特性。 最重要的,我们所讨论的每个工具都可从 IBM 的 alphaWorks 站点 (www.alphaworks.ibm.com) 和其它网站免费获得。

未讨论的:

有些重要的编程概念并未在此介绍:
1 使用可视工具来构建 XML 应用
2 将一个 XML 文档从一种形式转换到另一种
3 为最终用户或其他进程创建接口,及对后端存储数据的接口
当您构建一个 XML 应用时,所有这些概念都是重要的。我们正在编制新的教程来讨论它们,因此请常光顾我们的网址!

XML 应用架构

一个 XML 应用通常是基于一个 XML 解析器而构建的。它为其用户提供了一个接口,以及对后端存储数据的一个接口。

本教程关注于编写使用 XML 解析器来操作 XML 文档的 Java 代码。如下边图片所示,本教程关注于中间那块。







第二章 解析器基础

基础

一个 XML 解析器是一段可以读入一个文档并分析其结构的代码。在本章节,我们将讨论如何使用一个 XML 解析器来读入一个 XML 文档。我们也将讨论不同类型的解析器以及您在何时使用它们。

本教程后面的章节将讨论您从解析器可以获得什么以及如何使用这些结果。

如何使用一个解析器

我们将在稍后的章节详细讨论它,但通常而言,您如下使用它:

1 创建一个解析器对象
2 将您的 XML 文档传递给解析器
3 处理结果
构建一个 XML 应用显然远远超出这些,但通常一个 XML 的应用将包含这些流程。

解析器种类

有不同的方法来划分解析器种类:

验证或非验证解析器
支持 Document Object Model (DOM) 的解析器
支持 Simple API for XML (SAX) 的解析器
用特定语言编写的解析器 (Java, C++, Perl 等)

验证或非验证解析器

如我们在第一个教程中所提及的,XML 文档如果使用一个 DTD 并符合 DTD 中的规则将被称为有效文档(valid document)。符合基本标记规则的 XML 文档被称为格式正确文档(well-formed document)。

XML 规范要求所有的解析器当其发现一个文档不是格式正确时要报错。验证(Validation)则是另一个问题了。验证解析器(Validating parser)在解析 XML 文档同时进行验证。非验证解析器(Non-validating parser) 忽略所有的验证错误。换而言之,如果一个 XML 文档是格式正确的时,一个非验证解析器并不关注文档是否符合其对应 DTD 所指定的规则(如果有的话)。

为何使用非验证解析器?

速度和效率。要一个 XML 解析器处理 DTD 并确保每个 XML 的元素符合在 DTD 中的规则需要相当大的开销。如果您确定一个 XML 文档是有效的(可能来自一个数据源),那就没有必要在次验证它了。

同样,有时您所需要的只是从一个文档中找出 XML 的标记。一旦您有了这些标记,您可以将数据从中提取出然后加以处理。如果这就是您所需要的,一个非验证解析器就是正确的选择。

Document Object Model (DOM)

文档对象模型(Document Object Model)是 World Wide Web Consortium(W3C) 的正式推荐。它定义了一个接口使得程序可以存取和更新 XML 文档的风格、结构和内容。支持 DOM 的 XML 解析器实现该接口。

该规范的第一版,DOM Level 1,可从 http://www.w3.org/TR/REC-DOM-Level-1 获得, 如果您愿意阅读规范的话。

DOM 解析器可提供什么

当您用一个 DOM 解析器来解析一个 XML 文档时,您将获得一个包含文档中所有元素的树结构。DOM 提供了不同的功能来检查文档的内容和结构。

关于标准

现在我们即将讨论开发 XML 应用了,我们也要关注 XML 的标准。正式而言,XML 是 MIT(麻省理工) 的商标和 World Wide Web Consortium (W3C)组织的产品。

XML 规范,W3C 的正式推荐,可从 www.w3.org/TR/REC-xml 下载。W3C 站点包含了 XML、DOM 以及一大堆 XML 相关标准的规范。

Simple API for XML (SAX)

SAX API 是另一种处理 XML 文档内容的方法。一个既成事实的标准,它由 David Megginson 和 XML-Dev 邮件列表其它成员所开发。

要查看完整的 SAX 标准,参见 www.megginson.com/SAX/。要参加 XML-Dev 邮件列表,发送邮件到 majordomo@ic.ac.uk 其中包含: subscribe xml-dev。

SAX 解析器可提供什么

当您使用 SAX 解析器来解析 XML 文档时,解析器在文档的不同处将产生事件。由您来决定对每个事件如何处理。

SAX 解析器会在以下情况下产生事件:在文档开始和结束时,在一个元素开始和结束时,或者它在一个元素中找到字符时,以及其它若干点。您可编写 Java 代码来处理每个事件,以及如何处理从解析器获得的信息。

何时使用 SAX?何时使用 DOM?

我们将在稍后的章节详细讨论这个问题,但通常而言,您在下列时候应该使用一个 DOM 解析器:

您需要十分了解文档的结构
您需要操作文档中的某些部分(例如,您可能想对某些元素排序)
您需要不止一次使用文档中的信息
当您只需要从一个 XML 文档中提取若干元素时,可使用 SAX 解析器。SAX 解析器在您没有大多数内存时、或者如果您只需要使用文档中的信息一次(而不是解析文档一次,而后要反复使用它)。

不同语言的 XML 解析器

在 Web 上使用的大多数语言都有其对应的 XML 解析器和库,包括 Java、C++、Perl 和 Python。下一页介绍了 IBM 或其它公司提供的解析器的链接。

本教程中绝大多数的示例是使用 IBM 的 XML4J 解析器。我们所讨论的所有代码使用标准的接口。在本教程的最后章节,我们将向您展现编写可使用不同解析器的代码是如何简单。

Java

IBM 的解析器,XML4J,可从 www.alphaWorks.ibm.com/tech/xml4j 获得。
James Clark 的解析器,XP,可从 www.jclark.com/xml/xp 获得。
Sun 的 XML 解析器可从 developer.java.sun.com/developer/products/xml/ (您必需成为 Java Developer Connection 的会员)下载。
DataChannel 的 XJParser 可从 xdev.datachannel.com/downloads/xjparser/ 获得。


C++

IBM 的 XML4C 解析器可从 www.alphaWorks.ibm.com/tech/xml4c 获得。
James Clark 的 C++ 解析器,expat,可从 www.jclark.com/xml/expat.html 获得。


Perl

有多种 Perl 语言的 XML 解析器。要获得更多信息,参见 www.perlxml.com/faq/perl-xml-faq.html。


Python

要获得更多 Python 语言的 XML 解析器,参见 www.python.org/topics/xml/。

总结

任何 XML 应用的核心是一个 XML 解析器。要处理一个 XML 文档,您的应用将创建一个 parser 对象,将一个 XML document 传递给它,然后处理从 parser 对象返回的结果。

我们讨论了不同类型的 XML 解析器,以及您为何选取其一。我们用不同方式来对解析器分类:

验证或非验证解析器
支持 Document Object Model (DOM) 的解析器
支持 Simple API for XML (SAX) 的解析器
用特定语言编写的解析器 (Java, C++, Perl 等)
在我们的下一章节,我们将探讨 DOM 解析器和如何使用它们。

第三章 DOM (Document Object Model)
Dom, dom, dom, dom, dom,
Doobie, doobie,
Dom, dom, dom, dom, dom...

DOM 是一个操作文档结构的通用接口。它设计的一个目标是为一个 DOM 兼容解析器所编写的 Java 代码应该可以使用其它任意 DOM 兼容的解析器而不需要修改代码。(我们稍后将展示这个。)

正如我们前面所提的,一个 DOM 解析器将以树形式返回您整个文档的结构。

示例代码

在我们继续以前,请您下载我们的示例 XML 应用程序。解开此文件 xmljava.zip,就可以了!(blueski:***或者查看本教程附录)

DOM 接口

DOM 定义了多个 Java 接口。下列是常用的:

Node: DOM 基本的数据类型。
Element: 您将最主要处理的对象是 Element。
Attr: 代表一个元素的属性。
Text: 一个 Element 或 Attr 的实际内容。
Document: 代表整个 XML 文档。一个 Document 对象通常也被称为一棵 DOM 树。

常用的 DOM 方法

当您使用 DOM 时,下列是您将常会使用的方法:

Document.getDocumentElement()
返回文档的根(root)元素。
Node.getFirstChild() and Node.getLastChild()
返回给定 Node 的第一个子女。
Node.getNextSibling() and Node.getPreviousSibling()
它将删除 DOM 树中一切内容,格式化您的硬盘,然后给您地址簿中每个人发送一个谩骂的邮件。(不是真的啦。这些方法返回下一个或前一个给定 Node 的同胞。)
Node.getAttribute(attrName)
对给定的 Node,返回给定名称的属性。例如,如果您要获得名为 id 属性 的对象,可调用 getAttribute("id")。

我们的第一个 DOM 应用!

介绍了很多概念,让我们继续吧。我们的第一个应用简单地读入一个 XML 文档并将其内容输出到标准输出。

在一个命令行窗口,运行下面的命令:

java domOne sonnet.xml

这个命令将载入我们的应用然后让它解析 sonnet.xml 文件。如果一切运行正常,您将看到 XML 文档的内容被输出到标准输出。
<?xml version="1.0"?>
<sonnet type="Shakespearean">
<author>
<last-name>Shakespeare</last-name>
<first-nam

上一个:搜集整理的对xml文件操作的java程序,基本可以满足基本的操作。
下一个:Java XML教程(第5章)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,