J2EE中使用Xerces解析XML文档的详细指南
立即解锁
发布时间: 2025-08-17 01:24:01 阅读量: 3 订阅数: 15 

# J2EE中使用Xerces解析XML文档的详细指南
## 1. 引言
在J2EE开发中,XML文档的解析是一项常见且重要的任务。Xerces作为一个强大的XML解析器,为我们提供了高效、灵活的解析解决方案。本文将详细介绍Xerces的相关知识,包括其与其他工具的关系、下载安装方法,以及在J2EE中使用DOM和SAX两种方式解析XML文档的具体实现。
## 2. Xerces与相关工具的关系
### 2.1 XML4J与Xerces
对于使用IBM的XML for Java类(XML4J)的开发者来说,XML4J中的解析器是基于Xerces解析器实现的。IBM对Xerces有很大的贡献,并将其用于XML4J中的DOM解析器。Xerces通常是最新的解析器代码,而XML4J通常会在Xerces新版本发布一两个月后采用。可以在http://alphaworks.ibm.com/tech/xml4j 查看XML4J中嵌入的当前Xerces版本信息。
### 2.2 JAXP与Xerces
Sun的Java API for XML Processing(JAXP)API也可以通过其“可插拔接口”架构访问Xerces。JAXP提供了对Xerces功能的访问,但技术上并不提供这些功能。JAXP可以在不改变解析或转换XML文档的应用程序底层源代码的情况下,更改用于解析和转换XML文档的处理器。
## 3. 下载和安装Xerces
如果你的J2EE IDE没有预装Xerces解析器(大多数IDE会预装),可以从http://xml.apache.org/xerces2-j/index.html 下载最新的Java版本。Xerces以压缩的zip文件格式(非Windows用户为tar格式)提供,目前大小约为5MB。你可以选择只下载.jar文件(即“二进制”下载),或者同时下载.jar文件和源代码(即“源代码”下载)。下载完成后,将Xerces解压并复制到你选择的目录。
以下是“二进制”下载版本的Xerces组件文件和默认子目录位置:
| 接口名称 | 描述 |
| --- | --- |
| xercesImpl.jar | 包含所有受支持的Xerces解析器的实现类。目前包括DOM Level 1和2、部分DOM W3C DOM Level 3工作草案规范以及SAX版本2。 |
| xmlParserAPIs.jar | 包含核心Java API类。 |
| xercesSamples.jar | 示例类文件。 |
| data/ | 包含示例XML数据、DTD和Schema的目录。 |
| docs/ | 包含Xerces API和实现类文档的目录。 |
| samples/ | 包含示例源代码的目录。示例源代码包含在二进制和源代码分发中。 |
下载、解压并将Xerces分发文件复制到目标位置后,可以通过打开/docs目录中的index.html文件来阅读分发文档。
## 4. J2EE中解析XML文档的方法
在J2EE中,解析XML文档有两种主要方法:Document Object Model(DOM)和Simple API for XML(SAX),Xerces在J2EE中支持这两种方法。
### 4.1 DOM解析方法
DOM将XML文档表示为内存中的节点树。DOM方法用于遍历XML文档,节点属性提供节点值。只要创建节点树的应用程序在内存中,DOM节点树就会驻留在内存中,并且应用程序可以随时访问DOM节点。
以下是一个简单的XML文档示例:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<rootelement>
<firstelement position="1">
<level1 children="0">This is level 1 of the nested elements</level1>
</firstelement>
<secondelement position="2">
<level1 children="1">
<level2>This is level 2 of the nested elements</level2>
</level1>
</secondelement>
</rootelement>
```
以下是使用DOM解析该XML文档的Java代码:
```java
import java.io.*;
import org.w3c.dom.*;
import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.SAXException;
public class SimpleParsingWithDOM {
public static void main(String[] args) {
SimpleParsingWithDOM SPWD = new SimpleParsingWithDOM();
}
public SimpleParsingWithDOM() {
String XMLToParse = "C:/jdk1.3.1_01/bin/XMLBookSource/XMLDocs/verysimpleXML.xml";
DOMParser parser = new DOMParser();
try {
parser.parse(XMLToParse);
Document document = parser.getDocument();
nodeReader(document);
} catch (IOException ie) {
System.err.println(ie);
} catch (SAXException se) {
System.err.println(se);
}
}
private void nodeReader(Node node) {
if (node.hasChildNodes()) {
NodeList children = node.getChildNodes();
if (children != null) {
for (int i = 0; i < children.getLength(); i++) {
Node ThisNode = children.item(i);
String name = children.item(i).getNodeName();
String localName = ThisNode.getLocalName();
String uri = ThisNode.getNamespaceURI();
String prefix = ThisNode.getPrefix();
String value = ThisNode.getNodeValue();
String NodeText = null;
int type = ThisNode.getNodeType();
switch (type) {
case 1:
NodeText = "Node type 1: Element Constant: ELEMENT_NODE \r\n";
break;
case 2:
NodeText = "Node type 2: Attribute Constant: ATTRIBUTE_NODE \r\n";
break;
case 3:
NodeText = "Node type 3: Text Constant: TEXT_NODE \r\n";
break;
case 4:
NodeText = "Node type 4: CDATA Section Constant: CDATA_SECTION_NODE \r\n";
break;
case 5:
NodeText = "Node type 5: Entity Reference Constant: ENTITY_REFERENCE_NODE \r\n";
break;
case 6:
NodeText = "Node typ
```
0
0
复制全文
相关推荐










