首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

应用Apache的Digester解析XML文件

2012-11-10 
使用Apache的Digester解析XML文件物采系统中,读取*query*.xml文件,使用了Apache的Digester来解析,我做的专

使用Apache的Digester解析XML文件

物采系统中,读取*query*.xml文件,使用了Apache的Digester来解析,我做的专家信息导入模块,也需要读取定义在XMl中的导入验证规则。原来使用的是ShiChao提供的SAX解析XML文件方法。现在改为用Digester来解析。

使用的是org.apache.commons.digester3.annotations下的包,annotations顾名思义就是注释模式,可参照:

http://commons.apache.org/digester/guide/annotations.html?上的样例。

我的做法具体如下:

1.我的导入规则验证的XML文件的内容:

?

?2.由于使用的是Digester的annotations模式,所以需要建立几个与xml文件内容相互映射的java bean:

? (1).ExpImpValContext类:

?注:可以看到在java类里出现了@SetProperty标签和@BeanPropertySetter标签,前者对应的是形如:

?????? <id value="abc" />这样的映射,后者对应的是形如:<id>abc</id>这样的映射。

3.在main函数中启动:

package com.cnpc.pms.exp.inf.dto;import java.io.IOException;import java.io.InputStream;import java.util.List;import org.apache.commons.digester.Digester;import org.apache.commons.digester.annotations.DigesterLoader;import org.apache.commons.digester.annotations.DigesterLoaderBuilder;import org.springframework.core.io.Resource;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import com.cnpc.pms.base.util.ConfigurationUtil;public class Index {public static final String DEFAULT_CONFIG_LOCATION = "/conf/expinfo-import-validate-rules.xml";public static void main(String[] args) {Resource[] resources = ConfigurationUtil.getAllResources(DEFAULT_CONFIG_LOCATION);if (resources != null) {for (int i = 0; i < resources.length; i++) {Resource resource = resources[i];try {ExpImpValContext expImpValContext = parseXMLObject(ExpImpValContext.class, resource);List<ExpImpValHeader> list = expImpValContext.getHeaders();list.iterator();} catch (IOException e) {} catch (SAXException e) {}}}}public static <T> T parseXMLObject(Class<T> clazz, Resource resource) throws IOException, SAXException {InputStream is = resource.getInputStream();InputSource inputSource = new InputSource(is);DigesterLoader digesterLoader =new DigesterLoaderBuilder().useDefaultAnnotationRuleProviderFactory().useDefaultDigesterLoaderHandlerFactory();Digester digester = digesterLoader.createDigester(clazz);return (T) digester.parse(inputSource);}}

?

?

热点排行