digester.addObjectCreate("报表信息", Report.class); digester.addObjectCreate("报表信息/查询条件", QueryCondition.class); digester.addObjectCreate("报表信息/查询语句", QueryParagraph.class); digester.addObjectCreate("报表信息/查询语句/普通查询", NormalQuery.class); digester.addObjectCreate("报表信息/查询语句/普通查询/SQL", Sql.class); digester.addSetNext("报表信息/查询条件", "setQueryCondition"); digester.addSetNext("报表信息/查询语句", "setQueryParagraph"); digester.addSetNext("报表信息/查询语句/普通查询", "addNoramlQueryList"); digester.addSetNext("报表信息/查询语句/普通查询/SQL", "setSql"); digester.addCallMethod("报表信息/查询语句/普通查询/SQL", "setValue", 0); digester.addSetProperties("报表信息/查询条件", "报表源", "reportSource"); digester.addSetProperties("报表信息/查询语句/普通查询/SQL", "T表名", "tName");
要点
1、按照模式定义对象。例如: digester.addObjectCreate("报表信息/查询语句/普通查询", NormalQuery.class);
2、如果下级包含的是单个对象就用 digester.addSetNext("报表信息/查询语句", "setQueryParagraph");
如果下级是多个则定制添加列表方法 digester.addSetNext("报表信息/查询语句/普通查询", "addNoramlQueryList");
3、设置对象的属性使用 digester.addSetProperties("报表信息/查询语句/普通查询/SQL", "T表名", "tName");
如果对象的下级是文本内容则调用 digester.addCallMethod("报表信息/查询语句/普通查询/SQL", "setValue", 0);
多级的xml解析有点复杂,开始的时候怎么写都不对,原来是复制代码的时候模式写错了,快要放弃的时候时候终于发现了问题,
所以很多时候如果遇到不合逻辑的错误的时候,那问题的原因可能是很简单的失误。
好久没有写代码,今天花半天时间和半夜的一点时间解决了问题还是觉得很开心的。