[jdom-interest] TestXMLOutputter

Brett McLaughlin brett.mclaughlin at lutris.com
Fri Oct 6 15:19:57 PDT 2000


Done.

-Brett

Alex Chaffee wrote:
> 
> Put this in samples/ please as TestXMLOutputter.java.
> 
> It reads an XML file and then outputs it according to the command-line
> parameters.  Use it to figure out what combination of options gives
> your desired output.
> 
> Example:
> 
> $ java TestXMLOutputter -trimText -omitEncoding namespaces.xml
> 
> <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="JavaXML:Book"><head><title><xsl:value-of select="JavaXML:Title" /></title></head><body><xsl:apply-templates select="*[not(self::JavaXML:Title)]" /></body></xsl:template></xsl:stylesheet>
> 
> Pretty cool huh? :-)
> 
>  - Alex
> 
> --
> Alex Chaffee                       mailto:alex at jguru.com
> jGuru - Java News and FAQs         http://www.jguru.com/alex/
> Creator of Gamelan                 http://www.gamelan.com/
> Founder of Purple Technology       http://www.purpletech.com/
> Curator of Stinky Art Collective   http://www.stinky.com/
> 
> /*--
> 
>  Copyright (C) 2000 Brett McLaughlin & Jason Hunter.
>  All rights reserved.
> 
>  Redistribution and use in source and binary forms, with or without
>  modification, are permitted provided that the following conditions
>  are met:
> 
>  1. Redistributions of source code must retain the above copyright
>     notice, this list of conditions, and the following disclaimer.
> 
>  2. Redistributions in binary form must reproduce the above copyright
>     notice, this list of conditions, and the disclaimer that follows
>     these conditions in the documentation and/or other materials
>     provided with the distribution.
> 
>  3. The name "JDOM" must not be used to endorse or promote products
>     derived from this software without prior written permission.  For
>     written permission, please contact license at jdom.org.
> 
>  4. Products derived from this software may not be called "JDOM", nor
>     may "JDOM" appear in their name, without prior written permission
>     from the JDOM Project Management (pm at jdom.org).
> 
>  In addition, we request (but do not require) that you include in the
>  end-user documentation provided with the redistribution and/or in the
>  software itself an acknowledgement equivalent to the following:
>      "This product includes software developed by the
>       JDOM Project (http://www.jdom.org/)."
>  Alternatively, the acknowledgment may be graphical using the logos
>  available at http://www.jdom.org/images/logos.
> 
>  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  SUCH DAMAGE.
> 
>  This software consists of voluntary contributions made by many
>  individuals on behalf of the JDOM Project and was originally
>  created by Brett McLaughlin <brett at jdom.org> and
>  Jason Hunter <jhunter at jdom.org>.  For more information on the
>  JDOM Project, please see <http://www.jdom.org/>.
> 
>  */
> 
> import java.io.File;
> import java.io.IOException;
> import java.io.OutputStream;
> import java.util.*;
> 
> import org.jdom.Document;
> import org.jdom.Element;
> import org.jdom.JDOMException;
> import org.jdom.input.SAXBuilder;
> import org.jdom.output.XMLOutputter;
> 
> /**
>  * <p><code>TestXMLOutputter</code> demonstrates how to use the {@link
>  *   org.jdom.output.XMLOutputter}.  It reads an XML file and then
>  *   outputs it according to the command-line parameters.  Use it to
>  *   figure out what combination of options gives your desired output.
>  * </p>
>  *
>  * @author Alex Chaffee (alex at jguru.com)
>  * @version 1.0
>  **/
> public class TestXMLOutputter {
> 
>     /** Default SAX Driver class to use */
>     private static final String DEFAULT_SAX_DRIVER_CLASS =
>         "org.apache.xerces.parsers.SAXParser";
> 
>     /** SAX Driver Class to use */
>     private String saxDriverClass;
> 
>     /** <code>{@link SAXBuilder}</code> instance to use */
>     private SAXBuilder builder;
> 
>     XMLOutputter outputter;
>     boolean testElements;
> 
>     /**
>      * <p>
>      * This will create an instance of <code>{@link SAXBuilder}</code>
>      *   for use in the rest of this program.
>      * </p>
>      *
>      * @param saxDriverClass <code>String</code> name of driver class to use.
>      */
>     public TestXMLOutputter(String saxDriverClass) {
>         this.saxDriverClass = saxDriverClass;
>         builder = new SAXBuilder(saxDriverClass);
> 
>         // Create an outputter with default formatting
>         outputter = new XMLOutputter();
>     }
> 
>     /**
>      * <p>
>      * This will parse the specified filename using SAX and the
>      *   SAX driver class specified in the constructor.
>      * </p>
>      *
>      * @param filename <code>String</code> name of file to parse.
>      * @param out <code>OutputStream</code> to output to.
>      */
>     public void testBuilder(String filename, OutputStream out)
>         throws IOException, JDOMException {
> 
>         // Build the JDOM Document
>         Document doc = builder.build(new File(filename));
> 
>         // Output the document
>         if (!testElements) {
>             outputter.output(doc, out);
>         }
>         else {
>             printElements(doc.getRootElement(), out);
>         }
>     }
> 
>     protected void printElements(Element e, OutputStream out) throws IOException, JDOMException {
>         out.write(("\n===== " + e.getName() + ": \n").getBytes());
>         out.flush();
>         outputter.output(e, out);
>         out.flush();
>         for (Iterator i=e.getChildren().iterator(); i.hasNext(); ) {
>             Element child = (Element)i.next();
>             printElements(child, out);
>         }
>         out.flush();
>     }
> 
>     /**
>      * <p>
>      * This provides a static entry point for creating a JDOM
>      *   <code>{@link Document}</code> object using a SAX 2.0
>      *   parser (an <code>XMLReader</code> implementation).
>      * </p>
>      *
>      * @param args <code>String[]</code>
>      *        <ul>
>      *         <li>First argument: filename of XML document to parse</li>
>      *         <li>Second argument: optional name of SAX Driver class</li>
>      *        </ul>
>      */
>     public static void main(String[] args) {
> 
>         String saxDriverClass = DEFAULT_SAX_DRIVER_CLASS;
>         boolean testElements = false;
>         XMLOutputter outputter = new XMLOutputter();
>         int i = 0;
>         do {
>             i = outputter.parseArgs(args, i);
>             if (i==args.length) break;
>             if (args[i].equals("-driver")) {
>                 saxDriverClass = args[++i];
>             }
>             if (args[i].equals("-testElements")) {
>                 testElements = true;
>             }
>             else if (args[i].equals("-h")) {
>                 i=args.length;
>                 break;
>             }
>             else if (!args[i].startsWith("-"))  // we're at the file list
>                 break;
>             ++i;
>         } while (i<args.length);
> 
>         if (i>=args.length) {
>             System.out.println
>                 ("Usage: java TestXMLOutputter " +
>                  "[-driver SAX Driver Class] [-testElements]\n" +
>                  "\t[-suppressDeclaration] [-omitEncoding]\n" +
>                  "\t[-indent x] [-indentSize x] [-indentLevel x]\n" +
>                  "\t[-expandEmpty] [-encoding x] [-newlines] [-lineSeparator x]\n" +
>                  "\t[-trimText]\n" +
>                  "\t(XML document filename)...\n"
>                  );
>             return;
>         }
> 
>         // Create an instance of the tester and test
>         TestXMLOutputter demo = new TestXMLOutputter(saxDriverClass);
>         demo.outputter = outputter;
>         demo.testElements = testElements;
> 
>         for (; i<args.length; ++i) {
>             // Load filename
>             String filename = args[i];
> 
>             try {
>                 demo.testBuilder(filename, System.out);
>             } catch (JDOMException e) {
>                 if (e.getRootCause() != null) {
>                     e.getRootCause().printStackTrace();
>                 } else {
>                     e.printStackTrace();
>                 }
>             } catch (Exception e) {
>                 e.printStackTrace();
>             }
>         }
>     }
> 
> }
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com

-- 
Brett McLaughlin, Enhydra Strategist
Lutris Technologies, Inc. 
1200 Pacific Avenue, Suite 300 
Santa Cruz, CA 95060 USA 
http://www.lutris.com
http://www.enhydra.org



More information about the jdom-interest mailing list