SAX drivers bug ... or feature !

Patrice Bonhomme Patrice.Bonhomme at loria.fr
Wed Nov 18 15:25:36 GMT 1998


Hi,

I think there is a little problem with AttributeList implementation within 
some of the SAX drivers (i have tested the following code with my SXP SAX 
driver, the XML4J SAX driver and the AELFRED SAX driver. We are all giving the 
same results (gosh...).

This code should write the size of each AttributeList that has been read by 
the parser when it reached the end of the Document. But it always prints the 
size of the last AtributeList found.

Bug or feature ?

Pat.

/*
 * @(#)       saxbug.java
 * 
 * Copyright  1998 (C) PATRICE BONHOMME
 *            UMR LORIA (Universities of Nancy, CNRS & INRIA)
 *
 */

import org.xml.sax.*;
import org.xml.sax.helpers.*;

import java.util.Vector;

/**
 * SAX demonstration.
 * 
 *
 * @version   
 * @author    Patrice Bonhomme, bonhomme at loria.fr
 */

public class saxbug
  extends org.xml.sax.HandlerBase
{
  public static void main (String args[] ) throws Exception
  {
    saxbug demo = new saxbug();
    Parser parser = null;
    
    try {
      
      // try to create a SAX parser
      parser = ParserFactory.makeParser();
      System.out.println(parser);
      parser.setDocumentHandler(demo);
      
    } catch (ClassNotFoundException e) {
      System.err.println("SAX parser class cannot be loaded.");
      System.exit(1);
    } catch (IllegalAccessException e) {
      System.err.println("SAX parser class does not have a zero-argument 
constructor.");
      System.exit(1);
    } catch (InstantiationException e) {
      System.err.println("SAX parser class cannot be instantiated.");
      System.exit(1);
    }
    
    for (int i = 0; i < args.length; i++) {
      System.out.println("parsing => " + args[i]);
      try {
	parser.parse(args[i]);
      } catch(Exception e) {
	System.out.println(e.getMessage());
      }
    }
  }

  //  HandlerBase methods overriding

  public void setDocumentLocator (Locator locator)
  {
  }
  
  Vector attrs;

  /**
   * @see org.xml.sax.DocumentHandler#startDocument
   */
  public void startDocument ()
  {
    attrs = new Vector();
  }

  
  /**
   * Print the size of each AttributeList within the Vector <code>attrs</code>
   * @see org.xml.sax.DocumentHandler#endDocument
   */
  public void endDocument ()
  {
    int j = 0;
    
    for (java.util.Enumeration e = attrs.elements(); e.hasMoreElements();j++) {
      AttributeList attlist = (AttributeList)e.nextElement();
      System.out.println("size of attlist(" + j +")=" + 
((AttributeList)attlist).getLength());
    }
  }
  
  
  /**
   * Add the AttributeList to the Vector <code>attrs</code>.
   *
   * @see org.xml.sax.DocumentHandler#startElement
   */
  public void startElement (String name, AttributeList attributes)
  {
    System.out.println("Start element: " + name + " size of attlist=" + 
attributes.getLength());
    attrs.addElement(attributes);
  }


  /**
   * @see org.xml.sax.DocumentHandler#endElement
   */
  public void endElement (String name)
  {
  }


  /**
   * @see org.xml.sax.DocumentHandler#characters
   */
  public void characters (char ch[], int start, int length)
  {
  }


  /**
   * @see org.xml.sax.DocumentHandler#ignorableWhitespace
   */
  public void ignorableWhitespace (char ch[], int start, int length)
  {
  }


  /**
   * @see org.xml.sax.DocumentHandler#processingInstruction
   */
  public void processingInstruction (String target, String data)
  {
  }
  
  // DTD Handler implementation

  /**
   * @see org.xml.sax.DTDHandler#unparsedEntityDecl
   */
  public void unparsedEntityDecl (String name,
                                  String publicId,
                                  String systemId,
                                  String notationName)
  {
  }

}

// EOF


-- 
  ==============================================================
  bonhomme at loria.fr               |      Office : B.228
  http://www.loria.fr/~bonhomme   |      Phone  : 03 83 59 30 52
  --------------------------------------------------------------
   * Serveur Silfide  : http://www.loria.fr/projets/Silfide
   * Projet Aquarelle : http://aqua.inria.fr
  ==============================================================



xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)




More information about the Xml-dev mailing list