Sorry, I lost you, didn't understand :( Please provide me a more
concrete sample, please
Simo

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



On Fri, Apr 1, 2011 at 9:37 AM, Kurt Xu <fxbird1...@163.com> wrote:
> Hi Simone:
>  Maybe you got me wrong. Two RulesX needs calling setRules twice ,right? How
> could be just set once.
>
>  Thanks
>
> Kurt
>
>
> On Fri, 01 Apr 2011 15:27:09 +0800, Simone Tripodi
> <simonetrip...@apache.org> wrote:
>
>> 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 <fxbird1...@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 <fxbird1...@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
>>>>> <simonetrip...@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
>>>>>> <simonetrip...@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 <fxbird1...@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 <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
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Using Opera's revolutionary email client: http://www.opera.com/mail/
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
>>>>>>>> For additional commands, e-mail: user-h...@commons.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
>>>>>> For additional commands, e-mail: user-h...@commons.apache.org
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Using Opera's revolutionary email client: http://www.opera.com/mail/
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
>>>>> For additional commands, e-mail: user-h...@commons.apache.org
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
>>>> For additional commands, e-mail: user-h...@commons.apache.org
>>>>
>>>
>>>
>>> --
>>> Using Opera's revolutionary email client: http://www.opera.com/mail/
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: user-h...@commons.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
>> For additional commands, e-mail: user-h...@commons.apache.org
>>
>
>
> --
> Using Opera's revolutionary email client: http://www.opera.com/mail/
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
> For additional commands, e-mail: user-h...@commons.apache.org
>
>

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

Reply via email to