commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kurt Xu" <fxbird1...@163.com>
Subject Re:Re: [digester]How to use SimpleRegexMatcher?
Date Thu, 31 Mar 2011 03:44:42 GMT

Sorry Simone:

    I need to paste the full xml and java file to help u locate the error,:)

xml:

<?xml version="1.0" encoding="UTF-8"?>

<Project name="project1">
     <Functionality description="add comment"  
url="http://dev.mygame.co.jp/user/register.do"
                    actionName="com.mygame.action.UserAction"  
actionMethod="register">

         <Class name="com.mygame.bo.UserBOImpl" method="register">
             <Parameter name="user" index="0" type="insert">
                 <Main>
                     <DeviceType constant="true">pc</DeviceType>
                     <CheckStatus constant="true">N</CheckStatus>
                     <ValidCheck constant="true">Yes</ValidCheck>
                     <CheckDesc>first check desc</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>
             <Parameter name="postVO" index="1" type="update"  
table="MOCO_CODICMT">
                 .....
             </Parameter>
         </Class>
     </Functionality>
</Project>

java code:

parser method:
private void parseProject2(URL url) throws IOException, SAXException {
         Digester d = new Digester();

         String pathFunc = "Project/Functionality";
         String pathClass = pathFunc + "/Class";
         String pathPara = pathClass + "/Parameter";

         d.addObjectCreate("Project", Project.class);
         d.addSetProperties("Project");

         d.addObjectCreate(pathFunc, Functionality.class);
         d.addSetNext(pathFunc, "addFunctionality");
         d.addSetProperties(pathFunc);
//        d.addSetProperties(pathFunc + "/BasicInfo");

         d.addObjectCreate(pathClass, ClassItem.class);
         d.addSetNext(pathClass, "addClassItem");
         d.addSetProperties(pathClass);


         d.addObjectCreate(pathPara, Parameter.class);
         d.addSetNext(pathPara, "addParameter");


         d.setRules(new RegexRules(new SimpleRegexMatcher()));


         d.addRule(pathPara+"/Main/*", new ParaItemRule());
         d.addSetNext(pathPara+"/Main/*", "addMainParaItem");

         d.addRule(pathPara +"SubText/*", new ParaItemRule());
         d.addSetNext(pathPara +"SubText/*", "addSubParaItem");

         d.parse(url);
         Project project = (Project) d.getRoot();

         System.out.println();
     }

ClassItem.java ---a pojo for saving all its Parameters

public class ClassItem {

	private String method;
	private String name;
     private String handler="";
     private List<Parameter> parameters;

     public ClassItem(String name, String method, List<Parameter>  
parameters) {
         this.name = name;
         this.method = method;
         this.parameters = parameters;
     }

     public ClassItem() {
     }

     public String getMethod() {
         return method;
     }

     public void setMethod(String method) {
         this.method = method;
     }

     public String getName() {
         return name;
     }

     public void setName(String name) {
         this.name = name;
     }

     public void addParameter(Parameter parameter){
         System.out.println("add parameter");
         if (parameters==null){
             parameters=new ArrayList<Parameter>();
         }

         parameters.add(parameter);
     }

     public List<Parameter> getParameters() {
         return parameters;
     }

     public String getHandler() {
         return handler;
     }

     public void setHandler(String handler) {
         this.handler = handler;
     }
}



thanks.

Kurt


> 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 <fxbird@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-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>


-- 
Using Opera's revolutionary email client: http://www.opera.com/mail/


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message