package org.fanhongtao.xml; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.apache.commons.digester.Digester; import org.apache.commons.digester.xmlrules.DigesterLoader; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.fanhongtao.log.RunLogger; import org.xml.sax.SAXException; /** * @author Dharma * @created 2009-6-3 */ public final class DigesterUtils { /** * 从XML文件中读取数据 * @param obj 保存数据的对象 * @param inputUrl 所要读取的XML文件对应的URL * @param rulesUrl XML文件读取规则对应的URL * @return 读取数据后对应的对象,如果读取失败,则返回null */ public static Object parse(Object obj, URL inputUrl, URL rulesUrl) { // Digester 1.8 需要的关闭的日志 Logger.getLogger("org.apache.commons.digester.Digester").setLevel(Level.OFF); Logger.getLogger("org.apache.commons.beanutils.BeanUtils").setLevel(Level.OFF); Logger.getLogger("org.apache.commons.beanutils.ConvertUtils").setLevel(Level.OFF); // Digester 2.0 新增的需要的关闭的日志 Logger.getLogger("org.apache.commons.beanutils.converters").setLevel(Level.OFF); InputStream inputStream = null; try { inputStream = new FileInputStream(inputUrl.getFile()); obj = parse(obj, inputStream, rulesUrl); } catch (Exception e) { RunLogger.warn("Failed to read XML", e); } finally { if (null != inputStream) { try { inputStream.close(); } catch (IOException e) { } } } return obj; } public static Object parse(Object obj, InputStream inputStream, URL rulesUrl) throws IOException, SAXException { Digester digester = DigesterLoader.createDigester(rulesUrl); digester.push(obj); digester.setValidating(false); return digester.parse(inputStream); } }