[jdom-interest] SAXBuilder with XMLFilter feature

Brett McLaughlin brett.mclaughlin at lutris.com
Mon Oct 23 10:12:29 PDT 2000


I put this in CVS today.

Thanks,
Brett

----- Replied message -----
 Sender: Joseph Bowbeer <jozart at csi.com>
Subject: [jdom-interest] SAXBuilder with XMLFilter feature
   Date: 10/22/2000 2:44:40 AM
----- Original message ----
> Below, please fine a small patch that will add an
> XMLFilter property to
> SAXBuilder.
> 
> First, here's the output from a simple test showing a
> DataFormatFilter
> and a DataUnformatFilter in operation:
> 
> -- test1.xml unfiltered --
> 
> <?xml version="1.0" standalone="yes"?>
> 
> <Person><name>Jane Smith</name></Person>
> 
> -- test1.xml filtered by DataFormatFilter --
> 
> <?xml version="1.0" encoding="UTF-8"?><Person>
> <name>Jane Smith</name>
> </Person>
> 
> -- test2.xml unfiltered --
> 
> <?xml version="1.0" standalone="yes"?>
> 
> <Person>
> <name>Jane Smith</name>
> </Person>
> 
> -- test2.xml filtered by DataUnformatFilter --
> 
> <?xml version="1.0" encoding="UTF-8"?><Person><name>Jane
> Smith</name></Person>
> 
> 
> The source for the first part of the test (i.e., test1)
> looks like:
> 
> XMLWriter echo = new XMLWriter();
> DataFormatFilter format = new DataFormatFilter(echo);
> format.setIndentStep(4);
> 
> SAXBuilder builder = new SAXBuilder();
> builder.setXMLFilter(format);
> Document doc = builder.build(in);
> 
> new XMLOutputter().output(doc, System.out);
> 
> 
> Notes:
> 
> 1. Two-stage filters are used in the tests above.  The
> first stage is an
> XMLWriter that outputs the unfiltered XML to stdout before
> passing it to
> the next stage for the "real" filtering.  The filtered
> output is written
> to stdout by JDOM's XMLOutputter.
> 
> 2. XMLOutputter does not currently have a separate setting
> for the
> newline(s) after the header, so I can't tell it to insert
> a couple
> newlines after the header without also having it change
> the document's
> content in a potentially significant way.
> 
> 3. The filters used in these tests are based on David
> Megginson's
> XMLWriter and DataWriter.
> 
> 
> Index: jdom/src/java/org/jdom/input/SAXBuilder.java
> ===========================================================
> ========
> RCS file:
> /home/cvspublic/jdom/src/java/org/jdom/input/SAXBuilder.jav
> a,v
> retrieving revision 1.24
> diff -c -r1.24 SAXBuilder.java
> *** jdom/src/java/org/jdom/input/SAXBuilder.java       
> 2000/10/18
> 15:53:45
> 1.24
> --- jdom/src/java/org/jdom/input/SAXBuilder.java       
> 2000/10/22
> 08:49:10
> ***************
> *** 88,93 ****
> --- 88,94 ----
> import org.xml.sax.SAXNotRecognizedException;
> import org.xml.sax.SAXNotSupportedException;
> import org.xml.sax.SAXParseException;
> + import org.xml.sax.XMLFilter;
> import org.xml.sax.XMLReader;
> import org.xml.sax.ext.LexicalHandler;
> import org.xml.sax.helpers.DefaultHandler;
> ***************
> *** 122,127 ****
> --- 123,131 ----
> /** DTDHandler class to use */
> private DTDHandler saxDTDHandler = null;
> 
> +      /** XMLFilter instance to use */
> +      private XMLFilter saxXMLFilter = null;
> +
> /**
> * <p>
> * This allows the validation features to be turned on/off
> ***************
> *** 220,225 ****
> --- 224,240 ----
> 
> /**
> * <p>
> +      * This sets custom XMLFilter for the
> <code>Builder</code>.
> +      * </p>
> +      *
> +      * @param xmlFilter <code>XMLFilter</code>
> +      */
> +     public void setXMLFilter(XMLFilter xmlFilter) {
> +         saxXMLFilter = xmlFilter;
> +     }
> +
> +     /**
> +      * <p>
> * This builds a document from the supplied
> *   input source.
> * </p>
> ***************
> *** 237,242 ****
> --- 252,271 ----
> XMLReader parser =
> XMLReaderFactory.createXMLReader(saxDriverClass);
> 
> +             // Install optional filter
> +             if (saxXMLFilter != null) {
> +
> +                 // Connect filter chain to parser
> +                 XMLFilter root = saxXMLFilter;
> +                 while (root.getParent() instanceof
> XMLFilter) {
> +                     root = (XMLFilter) root.getParent();
> +                 }
> +                 root.setParent(parser);
> +
> +                 // Read from filter
> +                 parser = saxXMLFilter;
> +             }
> +
> DefaultHandler contentHandler =
> new SAXHandler(doc);
> 
> --
> Enjoy
> 
> 
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest
> /youraddr at yourhost.com
> 


More information about the jdom-interest mailing list