commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simone Tripodi <simonetrip...@apache.org>
Subject Re: Re: [digester]How to use SimpleRegexMatcher?
Date Fri, 01 Apr 2011 07:06:21 GMT
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


Mime
View raw message