OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [xml-dev] use SAX to get "tree" under XML node



Will Johnson wrote:

> for example in the following xml file...
> 
> <fields>
>     <field1>value 1</field1>
>     <field2><style value="red"/><values>value 2</values></field2>
> </fields>
> 
> i want to be able to get the trigger on the element field2 and somehow
> get back the string
> 
> <style value="red"/><value1>value1</value1><value2>value
> 2</value2></values>
> 
> if i use a regular sax processor to get all the characters i end up
> getting only the text which in this case would be "value 1 value 2"

First, the contents of <field2> are:

   <style value="red"/><values>value 2</values>

but you say that you want to get the following string back:

   <style
value="red"/><value1>value1</value1><value2>value2</value2></values>

I'll assume either your sample document is wrong or what you want to get
back is wrong and what you're really saying is that you just want to get
the content of a given element -- in this case <field2> -- serialized as
XML.

This is easy to do. All you need is two globals:

   boolean processingField2
   StringBuffer field2Content

You set processingField2 to true in startElement when you hit <field2>
and to false in endElement when you hit </field2>. When processingField2
is true, you do the following:

a) in startElement, append the element tag to the StringBuffer. For
example:

   field2Content.append("<");
   field2Content.append(qname);
   field2Content.append(...); // append attributes
   field2Content.append(">");

b) in characters and ignorableWhitespace, append the character values.
c) in endElement, append the closing tag (similar to (a))

For more detailed code in answer to a similar question, see:

   http://lists.xml.org/archives/xml-dev/200111/msg00476.html

How to generalize this is left as an exercise to the reader :) You might
also be able to simplify things by using an XMLWriter class, such as
that available from www.megginson.com. (I haven't looked at that class,
so I'm not sure exactly how it works.)

-- Ron