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 <[email protected]> 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: [email protected]
For additional commands, e-mail: [email protected]