Hi Kurt, I suggest you first creating a digester rule that helps you handling a generic ParaItem element:
public final class ParaItemRule extends org.apache.commons.digester.Rule { @Override public void body(String namespace, String name, String text) throws Exception { digester.push(new ParaItem(name, text)); } } then plug the digester rules in the following way: Digester digester = new Digester(); /* take a look at http://commons.apache.org/digester/apidocs/org/apache/commons/digester/SimpleRegexMatcher.html */ digester.setRules(new RegexRules(new SimpleRegexMatcher())); digester.addRule("Class/Parameter/Main/*", new ParaItemRule()); digester.addSetNext("Class/Parameter/Main/*", "addMainParaItem"); digester.addRule("Class/Parameter/SubText/*", new ParaItemRule()); digester.addSetNext("Class/Parameter/SubText/*", "addSubParaItem"); THT, let me know! ;) Simo http://people.apache.org/~simonetripodi/ http://www.99soft.org/ On Wed, Mar 30, 2011 at 11:49 AM, fxbird <fxb...@gmail.com> wrote: > Hi all: > > I want to match some unknow elements nested some parent element where some > newly defined element might be added sometime. > > The sample xml is as below: > > <Class name="jp.hangame.motecoorde.coordinate.bo.CoordinateCommentBoImpl" > method="entry"> > <Parameter name="comment" index="0" type="insert" > table="MOCO_CODICMT"> > <Main> > <DeviceType constant="true">pc</DeviceType> > <CheckStatus constant="true">N</CheckStatus> > <ValidCheck constant="true">Yes</ValidCheck> > <CheckDesc></CheckDesc> > <UserId>userid</UserId> > <PrimaryKey1>cmtno</PrimaryKey1> > </Main> > <SubText> > <!--<Type constant="true/false"></Type>--> > <!--<Title>title</Title>--> > <Content>contents</Content> > <WriterId>writeid</WriterId> > <WriterUserName>userid</WriterUserName> > </SubText> > </Parameter> > </Class> > > > The elements under <Main> and <SubText> are all variable someday, both name > and amounts. So I define a ParaItem pojo to wrap sub elements of the two > element. That means I want to create a Paraitem for every sub element > ,whatever its name is, then add the object to paraent object Parameter's list > property saving all the related Paraitem. > > The Paraitem source code is following: > > public class ParaItem { > private String elemName; > private String argPropNameOrValue; > private boolean isConstant; > public ParaItem() { > } > public ParaItem(String elemName, String argPropNameOrValue, boolean > constant) { > this.elemName = elemName; > this.argPropNameOrValue = argPropNameOrValue; > isConstant = constant; > } > public ParaItem(String elemName, String argPropNameOrValue) { > this.elemName = elemName; > this.argPropNameOrValue = argPropNameOrValue; > } > public String getElemName() { > return elemName; > } > public String getArgPropNameOrValue() { > return argPropNameOrValue; > } > public boolean isConstant() { > return isConstant; > } > } > > > > The Parameter source code is below: > public class Parameter { > private String index; > private String operType; > private String dataType; > private List<ParaItem> listMainFiled =new ArrayList<ParaItem>(); > private List<ParaItem> listSubField =new ArrayList<ParaItem>(); > public Parameter(String operType) { > this.operType = operType; > } > public List<ParaItem> getListMainFiled() { > return listMainFiled; > } > public void setListMainFiled(List<ParaItem> listMainFiled) { > this.listMainFiled = listMainFiled; > } > public List<ParaItem> getListSubField() { > return listSubField; > } > public void setListSubField(List<ParaItem> listSubField) { > this.listSubField = listSubField; > } > public String getIndex() { > return index; > } > public void setIndex(String index) { > this.index = index; > } > public String getOperType() { > return operType; > } > public void setOperType(String operType) { > this.operType = operType; > } > public String getDataType() { > return dataType; > } > public void setDataType(String dataType) { > this.dataType = dataType; > } > public void addMainParaItem(ParaItem pi){ > getListMainFiled().add(pi); > } > public void addSubParaItem(ParaItem pi){ > getListSubField().add(pi); > } > } > > I suppose regex rule is the best way to make it , but googling and the > javadoc doesn't tell me how to set a regex expression for a pattern. No way > out, who knows the solotion , thanks. > > > Kurt > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org