You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Kurt Xu <fx...@163.com> on 2011/04/01 03:21:39 UTC
Re: Re: [digester]How to use SimpleRegexMatcher?
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
<si...@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
> <si...@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 <fx...@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 <fx...@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
Re: Re: Re: [digester]How to use SimpleRegexMatcher?
Posted by Simone Tripodi <si...@apache.org>.
Hi Kurt,
OK now I got it :D The Digester instance supports only 1 Rules
instance at time, you can't use 2 or more Rules instance at the same
time.
BTW all Rules implementations should support the basic matching
pattern, so the Regexp one I suggested you would work as well for your
case.
Even if I joined the team on 2010, yes, I'm one of Digester
committers; there's a new version of Digester in Sandbox[1] I
developed, I would really appreciate if you users can provide
feedbacks, contains then same features but quite different APIs,
thanks in advance :)
Have a nice day,
Simo
[1] http://commons.apache.org/sandbox/digester3/
http://people.apache.org/~simonetripodi/
http://www.99soft.org/
On Fri, Apr 1, 2011 at 1:08 PM, Kurt Xu <fx...@163.com> wrote:
> Ok, let me change the asking way. How to set RulesA and RulesB at the same
> time?
>
> btw:r u the digester developer? :)
>
> Thanks.
>
>
>
> On Fri, 01 Apr 2011 18:48:09 +0800, Simone Tripodi
> <si...@apache.org> wrote:
>
>> 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 <fx...@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
>>> <si...@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 <fx...@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 <fx...@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
>>>>>>> <si...@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
>>>>>>>> <si...@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 <fx...@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 <fx...@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
>>>>
>>>
>>>
>>> --
>>> 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
Re: Re: Re: [digester]How to use SimpleRegexMatcher?
Posted by Kurt Xu <fx...@163.com>.
Ok, let me change the asking way. How to set RulesA and RulesB at the same
time?
btw:r u the digester developer? :)
Thanks.
On Fri, 01 Apr 2011 18:48:09 +0800, Simone Tripodi
<si...@apache.org> wrote:
> 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 <fx...@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
>> <si...@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 <fx...@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 <fx...@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
>>>>>> <si...@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
>>>>>>> <si...@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 <fx...@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 <fx...@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
>>>
>>
>>
>> --
>> 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
Re: Re: Re: [digester]How to use SimpleRegexMatcher?
Posted by Simone Tripodi <si...@apache.org>.
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 <fx...@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
> <si...@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 <fx...@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 <fx...@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
>>>>> <si...@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
>>>>>> <si...@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 <fx...@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 <fx...@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
>>
>
>
> --
> 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
Re: Re: Re: [digester]How to use SimpleRegexMatcher?
Posted by Kurt Xu <fx...@163.com>.
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
<si...@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 <fx...@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 <fx...@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
>>>> <si...@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
>>>>> <si...@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 <fx...@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 <fx...@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
>
--
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
Re: Re: Re: [digester]How to use SimpleRegexMatcher?
Posted by Simone Tripodi <si...@apache.org>.
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 <fx...@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 <fx...@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
>>> <si...@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
>>>> <si...@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 <fx...@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 <fx...@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
Re:Re: Re: [digester]How to use SimpleRegexMatcher?
Posted by Kurt Xu <fx...@163.com>.
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 <fx...@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
>> <si...@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
>>> <si...@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 <fx...@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 <fx...@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
Re: Re: [digester]How to use SimpleRegexMatcher?
Posted by Simone Tripodi <si...@apache.org>.
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 <fx...@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
> <si...@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
>> <si...@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 <fx...@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 <fx...@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