用Digester简化XML文档处理(1)

xml

Digester框架属于Jakarta Commons,它以规则和模式为基础处理XML文档。与SAX和DOM之类的标准API相比,Digester不涉及太多的细节问题,非常适合于对XML文档进行简单的处理。 
在Java和XML开发中,一个常见的任务是把XML文档转换成对应的Java Bean对象的层次结构。人们经常用标准的SAX和DOM API来完成这个任务。虽然这两种API都很强大和灵活,但对于某些简单的任务来说,它们显得操作层次太低,也就是说,涉及了太多的细节问题。Jakarta Digester框架能够很好地满足这类场合的需要。 
Digester框架简介 

Jakarta的Digester框架从Struts框架发展而来,原先被用来处理struts-config.xml配置文件,但很快人们认识到它有着更广泛的用途,把它转入了Jakarta Commons项目。Jakarta Commons的目标是提供一个“可重用Java组件的仓库”。Digester最新的版本是1.3,于2002年8月13日发布。 
Digester框架允许开发者指定一组动作,当解析器在XML文档中发现某些特定的简单模式时动作被执行。Digester框架带有10个预定义的规则(Rule),涵盖了unmarshalling XML(例如创建Bean或设置Bean属性)的大多数需求( marshalling的原意是指“配制整齐,编组列车”,marshalling是在内存中为Java对象生成XML描述文档的过程,而unmarshalling是指把XML形式的描述转换到可用Java代码操作的对象的过程,我们称之为“反配制”),但必要时用户可以定义和实现自己的规则。 
在本文的例子中,我们将反配制下面这个XML文档: 
<?xml version="1.0"?>
<catalog library="somewhere">
  <book>
    <author>Author 1</author>
    <title>Title 1</title>
  </book>
  <book>
    <author>Author 2</author>
    <title>His One Book</title>
  </book>
  <magazine>
    <name>Mag Title 1</name>
    <article page="5">
      <headline>Some Headline</headline>
    </article>
    <article page="9">
      <headline>Another Headline</headline>
    </article>
  </magazine>
  <book>
    <author>Author 2</author>
    <title>His Other Book</title>
  </book>
  <magazine>
    <name>Mag Title 2</name>
    <article page="17">
      <headline>Second Headline</headline>
    </article>
  </magazine>
</catalog>

下面是Bean的代码。注意使用Digester框架时,Bean类必须定义成public。
import java.util.Vector;
public class Catalog {
  private Vector books;
  private Vector magazines;
  public Catalog() {
    books = new Vector();
    magazines = new Vector();
  }
  public void addBook( Book rhs ) {
    books.addElement( rhs );
  }
  public void addMagazine( Magazine rhs ) {
    magazines.addElement( rhs );
  }
  public String toString() {
    String newline = System.getProperty( "line.separator" );
    StringBuffer buf = new StringBuffer();
    buf.append( "--- Books ---" ).append( newline );
    for( int i=0; i<books.size(); i++ ){
      buf.append( books.elementAt(i) ).append( newline );
    }
    buf.append( "--- Magazines ---" ).append( newline );
    for( int i=0; i<magazines.size(); i++ ){
      buf.append( magazines.elementAt(i) ).append( newline );
    }
    return buf.toString();
  }
}
//===================================================
public class Book {
  private String author;
  private String title;
  public Book() {}
  public void setAuthor( String rhs ) { author = rhs; }
  public void setTitle( String rhs ) { title = rhs; }
  public String toString() {
    return "Book: Author='" + author + "' Title='" + title + "'"
  }
}
//===================================================
import java.util.Vector;
public class Magazine {
  private String name;
  private Vector articles;
  public Magazine() {
    articles = new Vector();
  }
  public void setName( String rhs ) { name = rhs; }
  public void addArticle( Article a ) {
    articles.addElement( a );
  }
  public String toString() {
    StringBuffer buf = new StringBuffer( "Magazine: Name='" + name + "' ");
    for( int i=0; i<articles.size(); i++ ){
      buf.append( articles.elementAt(i).toString() );
    }
    return buf.toString();
  }
}
//===================================================
public class Article {
  private String headline;
  private String page;
  public Article() {}
  public void setHeadline( String rhs ) { headline = rhs; }
  public void setPage( String rhs ) { page = rhs; }
  public String toString() {
    return "Article: Headline='" + headline + "' on page='" + page + "' "
  }
}

时间: 2024-10-27 11:43:09

用Digester简化XML文档处理(1)的相关文章

使用Digester解析XML文档示例

xml|示例 一. 概述 解析XML文档方面有不少的方法,也有不少的工具包可用,这里介绍的是来自Apache Jakarta的Digester,使用其解析XML文件非常方便而不需要过多的关心底层的具体解析过程. Digester最早出现在Struts中,后来随着Struts的发展以及其的公用性而被提到commens中独自立项,其底层实现的是SAX解析.当前版本为:1.5 二. 正文 1. 安装与配置 使用Digester需要如下几个软件包: Digester ,BeanUtils, Collec

Digester解析XML文档Sample

xml 解析XML文档 Digester的使用相当简单,请参看如下的SampleDigester类中的注释,这里不再拗述: /*============================================================ * Copyright:www.skyinn.org (c) 2002 - 2003 All rights reserved. * File:org.skyinn.quasar.config.SampleDigester * Inculde:Samp

研究 Java 中 XML 文档模型的特性和性能

xml|性能 Java 中的 XML: 文档模型,第一部分:性能 研究 Java 中 XML 文档模型的特性和性能 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 - 下载免费软件,快速启动开发 级别: 初级 Dennis M. Sosnoski, 总裁, Sosnoski Software Solutions, Inc. 2001 年 9 月 01 日 在本文中,Java 顾问 Dennis Sosnoski 比较几个 Java 文档模型的性能和功能.当选择模型时,无法做

Java中的XML: 文档模型,第一部分:性能

使用内存中 XML 文档的 Java 开发者可以选择使用标准 DOM 表示或几个 Java 特定模型中的任何一个.该灵活性已经帮助将 Java 建立成 XML 工作的出色平台.但是,由于不同模型数量的增加,已经更加难以确定如何比较模型的功能.性能和易用性. 关于使用"Java 中的 XML"系列中的第一篇文章研究了 Java 中一些领先的 XML 文档模型的特性和性能.它包括一组性能测试的结果.在系列中的第二篇文章将通过比较为实现同样任务所使用的不同模型的样本代码来研究易用性问题. 文

四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

原文链接 作者:Alexia(minmin) 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.net/proj

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.1.1 XML文档的结构

3.1.1 XML文档的结构 XML文档应当以一个文档头开始,例如: 严格来说,文档头是可选的,但是强烈推荐你使用文档头. 注意:因为建立SGML是为了处理真正的文档,因此XML文件被称为文档,尽管许多XML文件是用来描述通常不被称作文档的数据集的. 文档头之后通常是文档类型定义(Document Type Def?inition,DTD),例如: 文档类型定义是确保文档正确的一个重要机制,但是它不是必需的.我们将在本章的后面讨论这个问题. 最后,XML文档的正文包含根元素,根元素包含其他元素.

java中四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)_java

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.net/projects/dom4j/  一.介绍及优缺点分析

《Python Cookbook(第3版)中文版》——6.7 用命名空间来解析XML文档

6.7 用命名空间来解析XML文档 6.7.1 问题 我们要解析一个XML文档,但是需要使用XML命名空间来完成. 6.7.2 解决方案 考虑使用了命名空间的如下XML文档: <?xml version="1.0" encoding="utf-8"?> <top> <author>David Beazley</author> <content> <html xmlns="http://www

PHP遍历XML文档所有节点的方法

 这篇文章主要介绍了PHP遍历XML文档所有节点的方法,实例分析了php操作XML文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了PHP遍历XML文档所有节点的方法.分享给大家供大家参考.具体实现方法如下: 1. contact.xml代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 <contact id="43956"> <personal> <name> <first>J</fir