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

Reply via email to