org.apache.commons.digester.Digester使用

org.apache.commons.digester解析XML.rar org.apache.commons.digester解析XML.rar 完整的测试工程,里面有需要的四个包 立即下载
 

commons.digester软件包学习

   http://www.onjava.com/pub/a/onjava/2002/10/23/digester.html?page=1

它能方便地将XML文档所定义的元素转化为JAVA对象,其实它的用法有点象栈(当然内在的原理就是那个古老的东西,只是提供了更高一层的封装)。
      //
生成一个digester。主要需要引进commons-logging.jar、commons-collections.jar、commons-       beanutils.jar
          Digester digester = new Digester();
         
          //
设置对XML文档资料是否进行DTD验证

          digester.setValidating( false );
         
          //
当遇见 catalog 元素的时候,产生一个Catalog对象
          digester.addObjectCreate( "catalog", Catalog.class );
         
          //
当遇见 catalog 元素下面的book的时候,产生一个Book对象
          digester.addObjectCreate( "catalog/book", Book.class );
          //
当遇见 catalog 元素下面的book的author时候,调用author属性的Set方法
          digester.addBeanPropertySetter( "catalog/book/author", "author" );
          digester.addBeanPropertySetter( "catalog/book/title", "title" );
          //
当再一次遇见 catalog 元素下面的book的时候,调用catalog类的addBook()方法
          digester.addSetNext( "catalog/book", "addBook" );

          digester.addObjectCreate( "catalog/magazine", Magazine.class );
          digester.addBeanPropertySetter( "catalog/magazine/name", "name" );

          digester.addObjectCreate( "catalog/magazine/article", Article.class );
          //addSetProperties
()是将对应元素的属性赋值。
          digester.addSetProperties( "catalog/magazine/article", "page", "page" );
          digester.addBeanPropertySetter( "catalog/magazine/article/headline" );
          digester.addSetNext( "catalog/magazine/article", "addArticle" );

          digester.addSetNext( "catalog/magazine", "addMagazine" );
          //"F://Digester//catalog.xml"
为XML文档
          File input = new File( "F://Digester//catalog.xml" );
          Catalog c = (Catalog)digester.parse( input );
          System.out.println( c.toString() );
在测试以上网站的例子的时候引进:commons-digester.jar,另外请你引进:commons-logging.jar、commons-collections.jar、commons-beanutils.jar
这是因为在执行: Digester digester = new Digester();的时候配置了LOG(在apache下面的很多组件都会用到它的公用组件)。

 

 

Learning and Using Jakarta Digester

by Philipp K. Janert, Ph.D.
10/23/2002

Turning an XML document into a corresponding hierarchy of Java bean objects is a fairly common task. In a previous article, I described how to accomplish this using the standard SAX and DOM APIs.

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script>

Although powerful and flexible, both APIs are, in effect, too low-level for the specific task at hand. Furthermore, the unmarshalling procedure itself requires a fair amount of coding: a parse-stack must be maintained when using SAX, and the DOM-tree must be navigated when using DOM.

This is where the Apache Jakarta Commons Digester framework comes in.

The Jakarta Digester Framework

The Jakarta Digester framework grew out of the Jakarta Struts Web toolkit. Originally developed to process the central struts-config.xml configuration file, it was soon recognized that the framework was more generally useful, and moved to the Jakarta Commons project, the stated goal of which is to provide a "repository of reusable Java components." The most recent version, Digester 1.3, was released on August 13, 2002.

The Digester class lets the application programmer specify a set of actions to be performed whenever the parser encounters certain simple patterns in the XML document. The Digester framework comes with 10 prepackaged "rules," which cover most of the required tasks when unmarshalling XML (such as creating a bean or setting a bean property), but each user is free to define and implement his or her own rules, as necessary.

The Example Document and Beans

In this example, we will unmarshall the same XML document that we used in the previous article:

<?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>

The bean classes are also the same, except for one important change: In the previous article, I had declared these classes to have package scope -- primarily so that I could define all of them in the same source file! Using the Digester framework, this is no longer possible; the classes need to be declared as public (as is required for classes conforming to the JavaBeans specification):

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 + "' ";

   }

}

import org.apache.commons.digester.*;
       

   
     
   
import java.io.*;
       
import java.util.*;
       

   
     
   
public class DigesterDriver {
       

   
     
   
   public static void main( String[] args ) {
       

   
     
   
      try {
       
         Digester digester = new Digester();
       
         digester.setValidating( false );
       

   
     
   
         digester.addObjectCreate( "catalog", Catalog.class );
       

   
     
   
         digester.addObjectCreate( "catalog/book", Book.class );
       
         digester.addBeanPropertySetter( "catalog/book/author", "author" );
       
         digester.addBeanPropertySetter( "catalog/book/title", "title" );
       
         digester.addSetNext( "catalog/book", "addBook" );
       

   
     
   
         digester.addObjectCreate( "catalog/magazine", Magazine.class );
       
         digester.addBeanPropertySetter( "catalog/magazine/name", "name" );
       

   
     
   
         digester.addObjectCreate( "catalog/magazine/article", Article.class );
       
         digester.addSetProperties( "catalog/magazine/article", "page", "page" );
       
         digester.addBeanPropertySetter( "catalog/magazine/article/headline" ); 
       
         digester.addSetNext( "catalog/magazine/article", "addArticle" );
       

   
     
   
         digester.addSetNext( "catalog/magazine", "addMagazine" );
       

   
     
   
         File input = new File( args[0] );
       
         Catalog c = (Catalog)digester.parse( input );
       

   
     
   
         System.out.println( c.toString() );
       

   
     
   
      } catch( Exception exc ) {
       
         exc.printStackTrace();
       
      }
       
   }
       
}

After instantiating the Digester, we specify that it should not validate the XML document against a DTD -- because we did not define one for our simple Catalog document. Then we specify the patterns and the associated rules: the ObjectCreateRule creates an instance of the specified class and pushes it onto the parse stack. The SetPropertiesRule sets a bean property to the value of an XML attribute of the current element -- the first argument to the rule is the name of the attribute, the second, the name of the property.

Whereas SetPropertiesRule takes the value from an attribute, BeanPropertySetterRule takes the value from the raw character data nested inside of the current element. It is not necessary to specify the name of the property to set when using BeanPropertySetterRule: it defaults to the name of the current XML element. In the example above, this default is being used in the rule definition matching the catalog/magazine/article/headline pattern. Finally, the SetNextRule pops the object on top of the parse stack and passes it to the named method on the object below it -- it is commonly used to insert a finished bean into its parent.

Note that it is possible to register several rules for the same pattern. If this occurs, the rules are executed in the order in which they are added to the Digester -- for instance, to deal with the <article> element, found at catalog/magazine/article, we first create the appropriate article bean, then set the page property, and finally pop the completed article bean and insert it into its magazine parent.

Invoking Arbitrary Functions

It is not only possible to set bean properties, but to invoke arbitrary methods on objects in the stack. This is accomplished using the CallMethodRule to specify the method name and, optionally, the number and type of arguments passed to it. Subsequent specifications of the CallParamRule define the parameter values to be passed to the invoked functions. The values can be taken either from named attributes of the current XML element, or from the raw character data contained by the current element. For instance, rather than using the BeanPropertySetterRule in the DigesterDriver implementation above, we could have achieved the same effect by calling the property setter explicitly, and passing the data as parameter:

   digester.addCallMethod( "catalog/book/author", "setAuthor", 1 );
       
   digester.addCallParam( "catalog/book/author", 0 );

The first line gives the name of the method to call (setAuthor()), and the expected number of parameters (1). The second line says to take the value of the function parameter from the character data contained in the <author> element and pass it as first element in the array of arguments (i.e., the array element with index 0). Had we also specified an attribute name (e.g., digester.addCallParam( "catalog/book/author", 0, "author" );), the value would have been taken from the respective attribute of the current element instead.

One important caveat: confusingly, digester.addCallMethod( "pattern", "methodName", 0 ); does not specify a call to a method taking no arguments -- instead, it specifies a call to a method taking one argument, the value of which is taken from the character data of the current XML element! We therefore have yet another way to implement a replacement for BeanPropertySetterRule:

   digester.addCallMethod( "catalog/book/author", "setAuthor", 0 );

To call a method that truly takes no parameters, use digester.addCallMethod( "pattern", "methodName" );.

Creational

·         ObjectCreateRule: Creates an object of the specified class using its default constructor and pushes it onto the stack; it is popped when the element completes. The class to instantiate can be given through a class object or the fully-qualified class name.

·         FactoryCreateRule: Creates an object using a specified factory class and pushes it onto the stack. This can be useful for classes that do not provide a default constructor. The factory class must implement the org.apache.commons.digester.ObjectCreationFactory interface.

Property Setters

·         SetPropertiesRule: Sets one or several named properties in the top-level bean using the values of named XML element attributes. Attribute names and property names are passed to this rule in String[] arrays. (Typically used to handle XML constructs like <article page="10">.)

·         BeanPropertySetterRule: Sets a named property on the top-level bean to the character data enclosed by the current XML element. (Example: <page>10</page>.)

·         SetPropertyRule: Sets a property on the top-level bean. Both the property name, as well as the value to which this property will be set, are given as attributes to the current XML element. (Example: <article key="page" value="10" />.)

Parent/Child Management

·         SetNextRule: Pops the object on top of the stack and passes it to a named method on the object immediately below. Typically used to insert a completed bean into its parent.

·         SetTopRule: Passes the second-to-top object on the stack to the top-level object. This is useful if the child object exposes a setParent method, rather than the other way around.

·         SetRootRule: Calls a method on the object at the bottom of the stack, passing the object on top of the stack as argument.

Arbitrary Method Calls

·         CallMethodRule: Calls an arbitrary named method on the top-level bean. The method may take an arbitrary set of parameters. The values of the parameters are given by subsequent applications of the CallParamRule.

·         CallParamRule: Represents the value of a method parameter. The value of the parameter is either taken from a named XML element attribute, or from the raw character data enclosed by the current element. This rule requires that its position on the parameter list is specified by an integer index.

So far, we have specified the patterns and rules programmatically at compile time. While conceptually simple and straightforward, this feels a bit odd: the entire framework is about recognizing and handling structure and data at run time, but here we go fixing the behavior at compile time! Large numbers of fixed strings in source code typically indicate that something is being configured (rather than programmed), which could be (and probably should be) done at run time instead.

The org.apache.commons.digester.xmlrules package addresses this issue. It provides the DigesterLoader class, which reads the pattern/rule-pairs from an XML document and returns a digester already configured accordingly. The XML document configuring the Digester must comply with the digester-rules.dtd, which is part of the xmlrules package.

Below is the contents of the configuration file (named rules.xml) for the example application. I want to point out several things here.

Patterns can be specified in two different ways: either as attributes to each XML element representing a rule, or using the <pattern> element. The pattern defined by the latter is valid for all contained rule elements. Both ways can be mixed, and <pattern> elements can be nested -- in either case, the pattern defined by the child element is appended to the pattern defined in the enclosing <pattern> element.

The <alias> element is used with the <set-properties-rule> to map an XML attribute to a bean property.

Finally, using the current release of the Digester package, it is not possible to specify the BeanPropertySetterRule in the configuration file. Instead, we are using the CallMethodRule to achieve the same effect, as explained above.

<?xml version="1.0"?>

 

<digester-rules>

   <object-create-rule pattern="catalog" classname="Catalog" />

   <set-properties-rule pattern="catalog" >

      <alias attr-name="library" prop-name="library" />

   </set-properties-rule>

 

   <pattern value="catalog/book">

      <object-create-rule classname="Book" />

      <call-method-rule pattern="author" methodname="setAuthor"

                        paramcount="0" />

      <call-method-rule pattern="title" methodname="setTitle"

                        paramcount="0" />

      <set-next-rule methodname="addBook" />

   </pattern>

 

   <pattern value="catalog/magazine">

      <object-create-rule classname="Magazine" />

 

      <call-method-rule pattern="name" methodname="setName" paramcount="0" />

 

      <pattern value="article">

         <object-create-rule classname="Article" />

         <set-properties-rule>

            <alias attr-name="page" prop-name="page" />

         </set-properties-rule>   

         <call-method-rule pattern="headline" methodname="setHeadline"

                          paramcount="0" />

         <set-next-rule methodname="addArticle" />

      </pattern>

 

      <set-next-rule methodname="addMagazine" />

   </pattern>

</digester-rules>

Since all the actual work has now been delegated to the Digester and DigesterLoader classes, the driver class itself becomes trivially simple. To run it, specify the catalog document as the first command line argument, and the rules.xml file as the second. (Confusingly, the DigesterLoader will not read the rules.xml file from a File or an org.xml.sax.InputSource, but requires a URL -- the File reference in the code below is therefore transformed into an equivalent URL.)

import org.apache.commons.digester.*;

import org.apache.commons.digester.xmlrules.*;

 

import java.io.*;

import java.util.*;

 

public class XmlRulesDriver {

   public static void main( String[] args ) {

      try {

 

         File input = new File( args[0] );

         File rules = new File( args[1] );

 

         Digester digester = DigesterLoader.createDigester( rules.toURL() );

 

         Catalog catalog = (Catalog)digester.parse( input );

         System.out.println( catalog.toString() );

 

      } catch( Exception exc ) {

         exc.printStackTrace();

      }

   }

}

Conclusion

This concludes our brief overview of the Jakarta Commons Digester package. Of course, there is more. One topic ignored in this introduction are XML namespaces: Digester allows you to specify rules that only act on elements defined within a certain namespace.

We mentioned briefly the possibility of developing custom rules, by extending the Rule class. The Digester class exposes the customary push(), peek(), and pop() methods, giving the individual developer freedom to manipulate the parse stack directly.

Lastly, note that there is an additional package providing a Digester implementation which deals with RSS (Rich-Site-Summary)-formatted newsfeeds. The Javadoc tells the full story.

References

Philipp K. Janert, Ph.D. is a software project consultant, server programmer, and architect.


 

从仿真曲线到电路状态:用Cadence Virtuoso深度剖析CS放大器各个工作区(以电流源负载为例) 本文通过Cadence Virtuoso平台,深入剖析电流源负载CS放大器在不同工作区的表现,从仿真曲线解读电路状态。详细介绍了如何通过Vout-Vin直流扫描曲线判断MOS管工作区域(截止区、饱和区、线性区),并验证理论与仿真的一致性,提升模拟IC设计调试效率。 阅读详情

相关推荐

DolphinScheduler+DataX实战:5分钟搞定MySQL到Hive数据同步(附完整JSON配置)

本文详细介绍了如何利用DolphinScheduler与DataX构建企业级数据同步流水线,实现MySQL到Hive的高效数据同步。文章提供了从环境部署、核心组件配置到完整JSON配置的实战指南,并深入探讨了性能调优、增量同步策略以及生产环境下的监控与错误处理,帮助读者快速搭建稳定可靠的数据同步方案。

5b6n7m8的博客 253

Apache Commons Digester(Digester2.0)学习笔记

digester组件简化了xml文件处理操作,能将xml文件按照事先确定的规则(采用编码形式或xml配置文件形式),映射成java对象。digester组件现在最新版本是2.0,它所依赖的组件是:commons-logging(推荐1.1版本),BeanUtils(推荐1.8版本),还有需要jdk1.5.基本概念1. 在Digester的内部采用SAX来解析XML文件。为了能够正确的使用它,必须在

都市小混混 4469

医学图像配准实战:用Python实现MIND特征提取(附完整代码)

本文详细介绍了MIND(模态无关邻域描述符)在医学图像配准中的应用。通过Python和PyTorch实战,从原理到代码逐步解析了如何提取MIND特征,并利用其对结构而非灰度的感知能力,有效解决CT、MRI等多模态图像的对齐难题,为病灶追踪、手术导航等高级应用提供鲁棒性基础。

263

org.apache.commons.digester.Digester 解析 XML文件或者流

最近在做快捷支付这块,对XML这块接触的比较多.梳理XML这块的时候, 突然发现 Digester 对不管是 字符串的 XML 还是 XML文件都能很好的解析..不足点就是引用的 apache的东西有点多. (apache的东西 耦合性太高.....)不过确实好用..   首先是 import   import org.apache.commons.digester.Digester; ...

小科的奋斗 645

MATLAB实战:5步搞定铣削稳定性叶瓣图(附完整代码解析)

本文提供了一份基于MATLAB的铣削稳定性叶瓣图实战指南。通过5个清晰步骤,从动力学原理出发,详细解析了利用半离散法构建稳定性判据、模块化代码设计、高效参数扫描及高级可视化的完整流程,并附有完整代码,帮助工程师快速预测和规避加工颤振,优化铣削工艺参数。

weixin_29197051的博客 194

YOLO11涨点优化:卷积魔改 | DCNv2升级版本,助力检测

在DCN的基础上,增加了2个创新点,分别是调制模块和使用多个调制后的DCN模块,从形成了DCN的升级版本——DCNv2

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 967

org.apache.commons.digester.Digester

http://baike.baidu.com/view/3602595.htm Digester本来仅仅是Jakarta Struts中的一个工具,用于处理struts-config.xml配置文件。显然,将XML文件转换成相应的Java对象是一项很通用的功能,这个工具理应具有更广泛的用途,所以很快它就在Jakarta Commons项目(用于提供可重用的Java组件库)中有了一席之地。

HkEndless的专栏 958

PCL SVD分解求变换矩阵【2026最新版】

该算例使用奇异矩阵分解来求变换矩阵,输入的是同名点坐标输出的是变换矩阵。博客长期更新,本文最近一次更新时间为:2026年5月10日。

点云侠的博客 36万+

学习一下org.apache.commons.digester.Digester

 The Example Document and BeansIn this example, we will unmarshall the same XML document that we used in the previous article:Author 1Title 1Author 2His One BookMag Title 1Some Headline

GetStudyMessages的专栏 8306

使用GitLab的VS Code插件 GitLab Workflow 来进行项目的DevOps管理,助力研发效能

使用VS Code的GitLab Workflow插件,进行项目的DevOps管理,将效率提升到MAX。直接在VScode中管理流水线,一键跳转到创建 Issues,MR

知无涯 5291

SKUA-GOCAD入门教程-第八节 线的创建与编辑7和8

本文介绍了曲线编辑操作的主要功能,包括曲线部分和区域的管理操作。在曲线部分操作方面,详细说明了如何合并、删除、移动和过滤曲线部分,支持精确或带公差的合并方式。在曲线区域操作方面,阐述了保留/删除区域点、移动区域点、保留/删除区域线段等操作。此外还介绍了节点连接功能,包括新增/删除连接、端点连接以及为曲线赋予地质特征的方法。

江洋大葱的博客 390

java.lang.ClassNotFoundException: org.apache.commons.digester.RuleSet

使用velocity报找不到org.apache.commons.digester.RuleSet这个类,导入如下4个包还报这个错java.lang.ClassNotFoundException: org.apache.commons.digester.RuleSet 是因为配置文件中引用了toolbox 如图只要注销他就可以了 java.lang.ClassNotFound

mingtianhaiyouwo的博客 1886

R语言中的summarise函数和mutate函数用于计算分组占比。下面是关于这两个函数的详细介绍以及相应的源代码示例:

R语言中的summarise函数和mutate函数用于计算分组占比。

CodeByte的博客 1182

org/apache/commons/digester/RuleSet

java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet错误   解决办法是:加入commons-digester.jar包

xaiowen的专栏 286

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

org.apache.commons.digester 学习

org.apache.commons.digester软件包。以下网址有一个很不错的介绍: [@more@]http://www.onjava.com/pub/a/onjava/2002/10/23/digester.html?page=1 它能方便地将XML文档所定义的元素转化为JAVA对象 [code="java"] //生成一个digester。主要需要引进commo...

认真做每件事 183

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

org/apache/commons/digester/RuleSet 解决方法

java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet解决方法   缺少这个包 commons-digester.jar  放到tommcat里的Lib 里即可 

ganlangreen的专栏 691

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

org.apache.commons.digester软件包学习

org.apache.commons.digester软件包学习 在毕业设计(基于XML的电子商务平台)的时候,我参考了几种处理XML文档的组件,DOM、JDOM等,最好我选择了用JDOM(当时感觉自己用的技术 比较先进)。但是在最近偶尔的机会见到了digester这个东西,感觉好奇所以今天学习了一 下:org.apache.commons.dig...

samson_g_q_su的博客 159

java中org.apache.commons.digester类用法

xml文件内容:   &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;channels&gt; &lt;channel switchTime="20080101000101" k="1.07" n="6" s="55" channelId="0404"

继中的专栏 234

JBOSS java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet

经常在启动JBOSS的时候,发现在myeclipse的console中报错java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet。 昨天工程不是还用的好好的,怎么这会会这样,后来一查都是说缺少了commons-digester.jar包,但是工程项目下明明有这个包。百思不得。 最后临时想到另外一个项目也用了JBOS...

weixin_33896726的博客 171

org.apache.commons.digester3.Digester(2)

要了解Digester如何处理众多rule,首先得知道他怎样处理xml的。Digester继承了DefaultHandler,使用sax的技术,所以他会先调用startDocument-->startElement-->endElement-->endDocument,当然如果有多个元素的话,会反复的调用startElement-->endElement直至元素遍历完成。 startDocume

310

org.apache.commons.digester.Digester学习

用于解析xml

chineselly的专栏 340

org.apache.commons.digester.Digester使用 [待续]

Digester digester = new Digester(); digester.push(this); //注册摘要的对象digester.setNamespaceAware(true); //名字空间敏感digester.setValidating(false); // 不校验 // Register our local copy of the DTDs...

weixin_34008805的博客 154
上一篇: 做算法处理:(MessageDigest)处理的步骤
下一篇: HTMLParser包的过滤分析
hjpengjava
博客等级 码龄18年 5粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值