用Xstream也可以实现类似的功能,但XStream对标签属性的解析比较麻烦,用apache的commons.digester就方便多了,举例如下:
用之前要先包含如下几个包:
commons-digester.jar
要解析的xml文件如下(server.xml):
<?xml version="1.0" encoding="gb2312"?> <config> <database-server supply="MYSQL" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/aws?characterEncoding=gb2312" username="root" password="password" debug="on" /> <diy diy.parameter1="" diy.parameter2="22" diy.parameter3="" diy.parameter4="" diy.parameter5="" diy.parameter6="" diy.parameter7="" diy.parameter8="" /> <optimize max.client="500" thread.overtime="1200000" database.max.session="200000" database.pool.init="5" database.pool.max.workload="30000" /> <log runtime.server="on" runtime.filename="../logs/access.log" error.filename="../logs/error.log" /> <plus-httpd supply="jboss" server.root="../webserver/webapps/portal/" security.code="AH{%C1%F5%BD%F0%D6%F9}" /> </config>
File localFile = new File("system.xml");
Digester localDigester;
(localDigester = new Digester()).setValidating(false);
localDigester.addObjectCreate("config", AWFConfig.class);
localDigester.addObjectCreate("config/database-server", DataBaseServerConf.class);
localDigester.addSetProperties("config/database-server", "supply", "supply");
localDigester.addSetProperties("config/database-server", "driver", "driver");
localDigester.addSetProperties("config/database-server", "url", "url");
localDigester.addSetProperties("config/database-server", "username", "userName");
localDigester.addSetProperties("config/database-server", "password", "password");
localDigester.addSetProperties("config/database-server", "debug", "debug");
localDigester.addSetNext("config/database-server", "setDataBaseServerConf");
localDigester.addObjectCreate("config/schedule", ScheduleConf.class);
localDigester.addSetProperties("config/schedule", "task.cost", "taskCost");
localDigester.addSetProperties("config/schedule", "plan.service", "planService");
localDigester.addSetNext("config/schedule", "setScheduleConf");
localDigester.addObjectCreate("config/diy", DIYConf.class);
localDigester.addSetProperties("config/diy", "diy.parameter1", "diyParameter1");
localDigester.addSetProperties("config/diy", "diy.parameter2", "diyParameter2");
localDigester.addSetProperties("config/diy", "diy.parameter3", "diyParameter3");
localDigester.addSetProperties("config/diy", "diy.parameter4", "diyParameter4");
localDigester.addSetProperties("config/diy", "diy.parameter5", "diyParameter5");
localDigester.addSetProperties("config/diy", "diy.parameter6", "diyParameter6");
localDigester.addSetProperties("config/diy", "diy.parameter7", "diyParameter7");
localDigester.addSetProperties("config/diy", "diy.parameter8", "diyParameter8");
localDigester.addSetNext("config/diy", "setDIYConf");
localDigester.addObjectCreate("config/optimize", OptimizeConf.class);
localDigester.addSetProperties("config/optimize", "max.client", "maxClient");
localDigester.addSetProperties("config/optimize", "thread.overtime", "threadOvertime");
localDigester.addSetProperties("config/optimize", "database.max.session", "maxSession");
localDigester.addSetProperties("config/optimize", "database.pool.init", "databasePoolInit");
localDigester.addSetProperties("config/optimize", "database.pool.max.workload", "databasePoolMaxWorkload");
localDigester.addSetNext("config/optimize", "setOptimizeConf");
localDigester.addObjectCreate("config/log", LogConf.class);
localDigester.addSetProperties("config/log", "runtime.server", "runtimeServer");
localDigester.addSetNext("config/log", "setLogConf");
localDigester.addObjectCreate("config/plus-httpd", HttpDConf.class);
localDigester.addSetProperties("config/plus-httpd", "supply", "supply");
localDigester.addSetProperties("config/plus-httpd", "server.root", "serverRoot");
localDigester.addSetProperties("config/plus-httpd", "security.code", "securityCode");
localDigester.addSetNext("config/plus-httpd", "setHttpDConf");
try {
return (AWFConfig) localDigester.parse(new FileInputStream(localFile));
} catch (SAXException localSAXException) {
throw new ConfigParserException(localSAXException.toString());
} catch (IOException localIOException) {
throw new ConfigParserException(localIOException.toString());
}
映射类AWFConfig:
public class AWFConfig extends Config { public static AWFServerConf _awfServerConf; public static DataBaseServerConf _databaseServerConf; public static OptimizeConf _optimizeConf; public static LogConf _logConf; public static ScheduleConf _scheduleConf; public static HttpDConf _httpdConf; public static DIYConf _diyConf; private AWFServerConf awfServerConf; private DataBaseServerConf dataBaseServerConf; private OptimizeConf optimizeConf; private LogConf logConf; private ScheduleConf scheduleConf; private DIYConf diyConf; private HttpDConf httpDConf; public AWFServerConf getAWFServerConf() { return this.awfServerConf; } public DIYConf getDIYConf() { return this.diyConf; } public DataBaseServerConf getDataBaseServerConf() { return this.dataBaseServerConf; } public HttpDConf getHttpDConf() { return this.httpDConf; } public LogConf getLogConf() { return this.logConf; } public OptimizeConf getOptimizeConf() { return this.optimizeConf; } public ScheduleConf getScheduleConf() { return this.scheduleConf; } public void setAWFServerConf(AWFServerConf paramAWFServerConf) { this.awfServerConf = paramAWFServerConf; } public void setDIYConf(DIYConf paramDIYConf) { this.diyConf = paramDIYConf; } public void setDataBaseServerConf(DataBaseServerConf paramDataBaseServerConf) { this.dataBaseServerConf = paramDataBaseServerConf; } public void setHttpDConf(HttpDConf paramHttpDConf) { this.httpDConf = paramHttpDConf; } public void setLogConf(LogConf paramLogConf) { this.logConf = paramLogConf; } public void setOptimizeConf(OptimizeConf paramOptimizeConf) { this.optimizeConf = paramOptimizeConf; } public void setScheduleConf(ScheduleConf paramScheduleConf) { this.scheduleConf = paramScheduleConf; } }