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: Re: [digester]How to use SimpleRegexMatcher?
Date Fri, 01 Apr 2011 07:27:09 GMT
Hi Kurt
Ok now I get it: exactly, calling Digetser.setRules() you loose all
the already set Rules instance, so it would be better if you call it
first.
HTH,
Simo

http://people.apache.org/~simonetripodi/
http://www.99soft.org/



On Fri, Apr 1, 2011 at 9:14 AM, Kurt Xu <fxbird1978@163.com> wrote:
> 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
>
>

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


Mime
View raw message