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: Re: [digester]How to use SimpleRegexMatcher?
Date Fri, 01 Apr 2011 07:14:16 GMT
Hi Simone:
    I mean if I implement rules ,say RulesA, RulesB , then setRules(new  
RulesA()),setRules(new RulesB()).
    the second calling setRules would reset the first call, right?


Thanks.

Kurt



> Hi Kurt,
> glad you fixed your issue, but honestly I didn't understand your last
> question, apologizes :( Can you provide more details/some sample?
> Thanks!
> Simo
>
> PS nope, I'm from Italy :P
>
> http://people.apache.org/~simonetripodi/
> http://www.99soft.org/
>
>
>
> On Fri, Apr 1, 2011 at 3:21 AM, Kurt Xu <fxbird1978@163.com> wrote:
>> Hi Simone:
>>
>>   I tried by myself after emailing and resovled it . the method is the  
>> same
>> as your reply. I have a question still though.  What if I want do set  
>> two
>> customized rule . The second setRules can reset or override the first
>> calling, can't it?
>>
>>   btw: why u say ni hao, r u from China?
>>
>>   Many thanks.
>>
>>
>> Kurt
>>
>>
>>
>> On Thu, 31 Mar 2011 14:39:59 +0800, Simone Tripodi
>> <simonetripodi@apache.org> wrote:
>>
>>> Ni hao again Kurt,
>>> just realized that the ParaItemRule implementation is incomplete, use
>>> the one below.
>>> Simo
>>>
>>> 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));
>>>   }
>>>
>>>   @Override
>>>    public void end() throws Exception {
>>>        digester.pop();
>>> }
>>>
>>> http://people.apache.org/~simonetripodi/
>>> http://www.99soft.org/
>>>
>>>
>>>
>>> On Thu, Mar 31, 2011 at 8:36 AM, Simone Tripodi
>>> <simonetripodi@apache.org> wrote:
>>>>
>>>> Hi Kurt,
>>>> calling the setRules() method in the way you did, makes the Rules
>>>> instance is reset, so you loose the already set patterns.
>>>> modify the code in order that the setRules() method is invoked before
>>>> setting patterns/rules.
>>>> HTH,
>>>> Simo
>>>>
>>>> private void parseProject2(URL url) throws IOException, SAXException {
>>>>      Digester d = new Digester();
>>>>      d.setRules(new RegexRules(new SimpleRegexMatcher()));
>>>>
>>>>      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.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();
>>>>  }
>>>>
>>>>
>>>> http://people.apache.org/~simonetripodi/
>>>> http://www.99soft.org/
>>>>
>>>>
>>>>
>>>> On Thu, Mar 31, 2011 at 5:44 AM, Kurt Xu <fxbird1978@163.com> wrote:
>>>>>
>>>>> 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
>>>>>
>>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> 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
>>
>>
>
> ---------------------------------------------------------------------
> 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