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


Help: OASIS Mailing Lists Help | MarkMail Help



   RE: [xml-dev] [ANN] Small, simple Java-based XML output library

[ Lists Home | Date Index | Thread Index ]

Oops!  I see the problem, you have a t on the end of sourceforge!!

-----Original Message-----
From: Michael Brennan [mailto:mpbrennan@earthlink.net]
Sent: Tuesday, March 04, 2003 1:30 AM
To: xml-dev@lists.xml.org
Subject: [xml-dev] [ANN] Small, simple Java-based XML output library

Well, I'm unemployed and not getting any job offers, so I'm using my
free time to pull together some disparate snippets of code -- and
working on some new stuff -- packaging it up and making it available as
open source.

As part of that, I have a very small, simple library for outputting XML
to SAX event handlers. The goal was to come up with a simple, compact,
and readable notation for creating SAX-based
XML output with a reasonable amount of built-in error checking. I tried
to come up with an API that comes as close as possible to the
simplicity, compactness, and readability of the markup being produced.
There is obvious limits to how far you can with this with a Java API
(without resorting to a template language), but I thought I'd see what I
could come up with. Here is what I came up with:

Consider the following XML snippet: 

        <employee id="500">

The code to produce this directly using SAX would be quite ugly and
verbose, in spite of the simplicity of the markup being produced. Code
to produce this using this API, though, could look something like this: 
    ResultFactory factory = new ResultFactory();
    DocumentResult result = 
        factory.newDocumentResult(new StreamResult(System.out));

    ElementResult dept = result.element("department");
    ElementResult emp = dept.element("employee")
    emp.attribute("id", "500");
    emp.element("firstName").text("Kilgore");   // child element with
text content
    emp.element("lastName").text("Trout");      // child element with
text content
    // output the accumulated result tree

Alternatively, we could emit each element as it is completed, and could
use an indentation style that emulates (somewhat) the XML structure we
wish to generate: 
    ResultFactory factory = new ResultFactory();
    DocumentResult result = 
        factory.newDocumentResult(new StreamResult(System.out));

        .element("employee").attribute("id", "500").end()
    // bail out here and output the remaining result tree

The idea is we have these opaque result objects with factory methods
corresponding to specific XML constructs. You can use these methods to
effectively iterate along an axis appending XML constructs. The
"element" method returns an ElementResult that has methods that let you
start adding constructs along either the attribute axis or child axis.
Other result types offer methods to append constructs along one
particular axis. Invoking "end()" flushes accumulated output out to the
SAX handlers, then steps up the parent axis to the parent
This is part of a larger toolkit I'm working on. However, it has no
dependencies on the rest of the toolkit, and has a different focus, so I
thought I'd go ahead and release this and see if anyone finds it of any

This may be downloaded from my SourceForge project web site: 

Comments and feedback are, of course, welcome.

The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
initiative of OASIS <http://www.oasis-open.org>

The list archives are at http://lists.xml.org/archives/xml-dev/

To subscribe or unsubscribe from this list use the subscription
manager: <http://lists.xml.org/ob/adm.pl>


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS