You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by "Schnitzer, Jason D (US SSA)" <ja...@baesystems.com> on 2003/03/12 00:18:35 UTC

[Digester] Re: Unknown nodes in digester?

Hello,

Thanks for all the work creating Digester it works great!

However, I have a similar problem to an earlier poster. I need to
preserve the data. So to continue on with a previous example I found in
the archive.

<ROOT>
 <USERDEFINED>
  <UNKNOWN1></UNKNOWN1>
 </USERDEFINED>
</ROOT>

I would like a way to store the <unknown1></unknown1> in a string inside
of my class... So if I did

someClass.getUserDefined() 

It would return a string

"<unknown1></unknown1>"

So I would like the rule:

  <call-method-rule pattern="USERDEFINED" methodname="setUserDefined"
paramcount="0"/>

To match all the way to the end tag of USERDEFINED with all the data
inside of it. If there are no matching child patterns to intercept it.

Is there a way to accomplish this?

Thanks,
Jason

-----Original Message-----
From: Craig R. McClanahan [mailto:craigmcc@apache.org] 
Sent: Wednesday, January 22, 2003 1:34 AM
To: Jakarta Commons Users List
Subject: Re: Unknown nodes in digester?




On Wed, 22 Jan 2003, Bill Chmura wrote:

> Date: Wed, 22 Jan 2003 00:43:20 -0500
> From: Bill Chmura <Bi...@Explosivo.com>
> Reply-To: Jakarta Commons Users List <co...@jakarta.apache.org>
> To: 'jakarta Commons Users List' <co...@jakarta.apache.org>
> Subject: Unknown nodes in digester?
>
>
> Hello,
>
> I am not sure what tool to use for what I need... I've used the DOM 
> before, JAXB but I hear digester is pretty good.  I've done some 
> reading, but was hoping someone could give me some advice.
>
> I need to read a number of small XML documents.  The kicker is that 
> internally I will know ahead of time what 70% of the tags are, but 
> there is the possibility for unknown tags to be within a known tag.  
> Can digester be configured to handle this?
>

In general, Digester works on a matching principle -- it assumes you
know the element nesting pattern you are looking for.  So, whether it's
useful to you or not for your task is how far ahead of time you know
what the element names will be -- if you have some sort of information
that says "an UNKNOWN1 will be nested inside a USERDEFINED inside a
ROOT", then you can dynamically construct the matching patterns for your
processing rules.

It's really impossible, though, to give you much more help without
understanding what you actually want to *do* with the data that is
parsed. For example, if you want random access to the nodes, you
probably want to use some sort of DOM-based solution -- anything that is
SAX based (including Digester) is not going to be very helpful.

> Something like:
>
>
> <ROOT>
> <USERDEFINED>
> <UNKNOWN1></UNKNOWN1> -> ?
> <UNKNOWN2></UNKNOWN2> -> ?
> </USERDEFINED>
> </ROOT>
>
>
> Thanks!
>
> Bill
>

Craig

Re: [Digester] Re: Unknown nodes in digester?

Posted by "Craig R. McClanahan" <cr...@apache.org>.

On Tue, 11 Mar 2003, Schnitzer, Jason D (US SSA) wrote:

> Date: Tue, 11 Mar 2003 15:18:35 -0800
> From: "Schnitzer, Jason D (US SSA)" <ja...@baesystems.com>
> Reply-To: Jakarta Commons Users List <co...@jakarta.apache.org>
> To: commons-user@jakarta.apache.org
> Subject: [Digester] Re: Unknown nodes in digester?
>
> Hello,
>
> Thanks for all the work creating Digester it works great!
>

Glad to hear it!

> However, I have a similar problem to an earlier poster. I need to
> preserve the data. So to continue on with a previous example I found in
> the archive.
>
> <ROOT>
>  <USERDEFINED>
>   <UNKNOWN1></UNKNOWN1>
>  </USERDEFINED>
> </ROOT>
>
> I would like a way to store the <unknown1></unknown1> in a string inside
> of my class... So if I did
>
> someClass.getUserDefined()
>
> It would return a string
>
> "<unknown1></unknown1>"
>
> So I would like the rule:
>
>   <call-method-rule pattern="USERDEFINED" methodname="setUserDefined"
> paramcount="0"/>
>
> To match all the way to the end tag of USERDEFINED with all the data
> inside of it. If there are no matching child patterns to intercept it.
>
> Is there a way to accomplish this?
>

Digester's standard pattern matching is really oriented towards pulling
out what you *do* know, rather than what you don't :-).  With the standard
rules, you could absorb non-element body content inside your user-defined
element, but not nested XML elements.  You might try playing with the
ExtendedBaseRules class (configure it on your Digester by calling
setRules()) and playing with the "*" and "!*" matching patterns to see if
you can get what you want.

> Thanks,
> Jason

Craig


>
> -----Original Message-----
> From: Craig R. McClanahan [mailto:craigmcc@apache.org]
> Sent: Wednesday, January 22, 2003 1:34 AM
> To: Jakarta Commons Users List
> Subject: Re: Unknown nodes in digester?
>
>
>
>
> On Wed, 22 Jan 2003, Bill Chmura wrote:
>
> > Date: Wed, 22 Jan 2003 00:43:20 -0500
> > From: Bill Chmura <Bi...@Explosivo.com>
> > Reply-To: Jakarta Commons Users List <co...@jakarta.apache.org>
> > To: 'jakarta Commons Users List' <co...@jakarta.apache.org>
> > Subject: Unknown nodes in digester?
> >
> >
> > Hello,
> >
> > I am not sure what tool to use for what I need... I've used the DOM
> > before, JAXB but I hear digester is pretty good.  I've done some
> > reading, but was hoping someone could give me some advice.
> >
> > I need to read a number of small XML documents.  The kicker is that
> > internally I will know ahead of time what 70% of the tags are, but
> > there is the possibility for unknown tags to be within a known tag.
> > Can digester be configured to handle this?
> >
>
> In general, Digester works on a matching principle -- it assumes you
> know the element nesting pattern you are looking for.  So, whether it's
> useful to you or not for your task is how far ahead of time you know
> what the element names will be -- if you have some sort of information
> that says "an UNKNOWN1 will be nested inside a USERDEFINED inside a
> ROOT", then you can dynamically construct the matching patterns for your
> processing rules.
>
> It's really impossible, though, to give you much more help without
> understanding what you actually want to *do* with the data that is
> parsed. For example, if you want random access to the nodes, you
> probably want to use some sort of DOM-based solution -- anything that is
> SAX based (including Digester) is not going to be very helpful.
>
> > Something like:
> >
> >
> > <ROOT>
> > <USERDEFINED>
> > <UNKNOWN1></UNKNOWN1> -> ?
> > <UNKNOWN2></UNKNOWN2> -> ?
> > </USERDEFINED>
> > </ROOT>
> >
> >
> > Thanks!
> >
> > Bill
> >
>
> Craig
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
>
>

Re: [Digester] Re: Unknown nodes in digester?

Posted by Simon Kitching <si...@ecnetwork.co.nz>.
On Wed, 2003-03-12 at 12:18, Schnitzer, Jason D (US SSA) wrote:

> <ROOT>
>  <USERDEFINED>
>   <UNKNOWN1></UNKNOWN1>
>  </USERDEFINED>
> </ROOT>
> 
> I would like a way to store the <unknown1></unknown1> in a string inside
> of my class... So if I did

How about using NodeCreateRule, which deals with DOM nodes?