Digester

最近留意到了一个解析xml的库,作为标记记录一下,以下是链接地址:

http://aga.iteye.com/blog/218587

http://jinguo.iteye.com/blog/210781

在学习Tomcat的源码中整理第15章节digester库的介绍如下:

Digester库学习和使用
### Digester ###
一个规则定义了Digester遇到特别的模式的时候必须做的动作。
一个规则用org.apache.commons.digester.Rule类。
Digester类包括零个或多个Rule对象。
在一个Digester实例中,规则及其模式被存储在接口org.apache.commons.digester.Rules
定义的类型中。每一次给Digester实例添加规则,都将Rule对象添加到Rules对象。
#####  Rule #####
在Rule中有两个方法:begin方法和end方法。
当解析一个XML文档的时候,
遇到开始元素,Digester实例调用Rule对象的begin方法,
而遇到结束元素的时候调用stop方法。
###########################################################################
1.创建对象
如果想让Digester给特定的规则创建对象,可以调用它的addObjectCreate方法。
该方法有四个实现,其中两个最常用方法的签名如下:
public void addObjectCreate(java.lang.String pattern, java.lang.Class clazz)
public void addObjectCreate(java.lang.String pattern, java.lang.String className)
方法addObjectCreate的另外两个实现允许在XML文档中定义类名,
而不是通过作为方法参数。
这个特性带来了强大的功能,它使得类名可以在运行时决定,下面是这两个方法的签名:
public void addObjectCreate(java.lang.String pattern, java.lang.String className, java.lang.String attributeName)
public void addObjectCreate(java.lang.String pattern, java.lang.String attributeName, java.lang.Class clazz)
在这两个实现中,attributeName参数定义了XML文档中的属性,名字由className指定
2.设置属性
另一个重要的方法是addSetProperties,
Digester对象可以通过它设置对象属性。该方法的一个实现的签名如下:
public void addSetProperties(java.lang.String pattern)
3.方法调用
Digester允许通过添加规则,见到相应的模式的时候就调用栈最高层中对象的方法。
该方法名为addCallMethod,它的一个实现的签名如下:
public void addCallMethod (java.lang.String pattern, java.lang.String methodName)
4.建立对象间的联系(addSetNext)
Digester实例有一个栈用来临时存储对象。
当调用addObjectCreate创建对象后,将对象压入堆栈中。
可以把堆栈想象成一口井,可以将对象放入到井中,而pop方法相当于取出井中最上边的元素。
当通过addObjectCreate方法创建两个对象的时候,第一个对象被放入井中,然后是第二个。
addSetNext用于建立第一个对象和第二个对象之间的关系,它把第二个对象作为参数传递给第一个对象。
下面是addSetNext方法的签名:
public void addSetNext(java.lang.String pattern, java.lang.String methodName)
参数pattern定义了触发该规则的模式,methodName参数是是第一个对象要被调用的方法名。
该模式的形式如firstObject/secondObject。
5.验证XML文档
可以使用Digester来对XML文档的结构进行验证,
一个XML文档是否合法取决于由Digester定义的validating属性,该属性的默认值为false。
方法setValidating用来用来设置是否要验证XML文档,该方法的签名如下:
 public void setValidating(boolean validating)
 如果想要验证XML文档,可以传递一个true值给该方法。
-------------------------------------------------------------------------------------------------------------------------------------

1.使用SAX解析xml文档中的对象:org.xml.sax.InputSource

File file = File对象

InputSource is = new InputSource("file://" + file.getAbsolutePath());
FileInputStream fis = new FileInputStream(file);
is.setByteStream(fis);

这样 is对象已经具有xml文档的所有内容了。

你可能感兴趣的:(DI)