使用Struts Digester来解析XML文件

 
Apache Commons Digester用来简化xml文件处理,它依赖的组件:BeanUtils、Logging、Collections。在内部是采用SAX来解析XML文件。
检修ABC项目中的“面包屑”处理就是使用这种方案。所谓面包屑就是在页面上起到导航作用的连接。比如“文档类别管理-》检修管理-》标准文档类别”。这里我们使用ct-views.xml文件来存放面包屑的所
有内容。该xml文件的部分内容如下:
< views >
 
< page  id ="VSD_WI003" >
  
< description > 标准文档列表 </ description >
  
< helpurl > standarddoc/workitem/SortWorkItemList.htm </ helpurl >
  
< crumb  level ="0" >
   
< name > 标准文档 </ name >
  
</ crumb >
  
< crumb  level ="1" >
   
< name > 文档编制 </ name >
   
< url > /standarddoc/WorkItemIndexAction.do </ url >
   
< target > mainWorkFrame </ target >
  
</ crumb >
  
< crumb  level ="2" >
   
< name > 文档列表 </ name >
  
</ crumb >
 
</ page >
</ views >
 
我们定义了三个普通的JAVABEAN,从范围的大到小依次是ViewConfig,PageConfig,CrumbConfig。
他们包含自己的setter和getter。view中存放page,page里存放crumb。在系统加载的时候一次读到stack里。
用来解析xml的类为ParseViewConfig,作用是解析ct-views里的内容,缓冲到stack中。
内容如下:
public   class  ParseViewConfig  {
    Digester digester 
= new Digester();
    Logger logger 
= Toolkit.getInstance().getLogger(this.getClass().getName());
    
public ViewConfig parse(InputStream input) {
        ViewConfig config 
= null;
        
//不进行XML与相应的DTD的合法性验证
        digester.setValidating(false);
        
//当遇到<views>时创建一个ViewConfig对象
        digester.addObjectCreate("views", ViewConfig.class);
        
//当遇到<page>时创建一个PageConfig对象
        digester.addObjectCreate("views/page", PageConfig.class);
        
//设置attribute
        digester.addSetProperties("views/page""id""id");
        digester.addSetProperties(
"views/page""file""file");
        digester.addSetProperties(
"views/page""path""path");
        
//设置bean property
        digester.addBeanPropertySetter("views/page/description""description");
        digester.addBeanPropertySetter(
"views/page/helpurl""helpurl");
        
//当遇到<crumb>时创建一个CrumbConfig对象
        digester.addObjectCreate("views/page/crumb", CrumbConfig.class);
        
//设置attribute
        digester.addSetProperties("views/page/crumb""level""level");
        
//设置bean property
        digester.addBeanPropertySetter("views/page/crumb/url""url");
        digester.addBeanPropertySetter(
"views/page/crumb/name""name");
        digester.addBeanPropertySetter(
"views/page/crumb/target""target");
        
//这里的addCrumbConfig是调用父接点对象的方法名,这里是PageConfig
        digester.addSetNext("views/page/crumb""addCrumbConfig");
        
//这里的addPageConfig是调用父接点对象的方法名,这里是ViewConfig
        digester.addSetNext("views/page""addPageConfig");
        
try {
            config 
= (ViewConfig)digester.parse(input);
        }
 catch(SAXException ex) {
            logger.error(ex.getMessage(), ex);
        }
 catch(IOException ex) {
            logger.error(ex.getMessage(), ex);
        }

        
return config;
    }
 
该文件返回一个ViewConfig对象的引用。接着我们使用plug-in技术使系统在加载前就载入这些信息,为此加入了SysInitPlugIn类,它实现了org.apache.struts.action.PlugIn接口。
解析ct-views的相关代码如下:
 //得到文件流
        InputStream input = actionServlet.getServletContext().getResourceAsStream(
                            "/WEB-INF/ct-views.xml");
 //解析文件
        ParseViewConfig parseViewConfig = new ParseViewConfig();
        ViewConfig config = parseViewConfig.parse(input);
为此,可以把这里得到的ViewConfig在页面上通过getter方法得到其相关的属性值。

你可能感兴趣的:(使用Struts Digester来解析XML文件)