You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xalan.apache.org by Gordon Ross <G....@ccw.gov.uk> on 2003/05/13 14:49:50 UTC

Custom SAX Parser

Hi,

I'm trying to use a custom SAX parser with Xalan. I started by using
the code below to use the standard SAX parser, and this works great:

    javax.xml.transform.TransformerFactory tFactory =
javax.xml.transform.TransformerFactory.newInstance();
    Templates template = tFactory.newTemplates(new
StreamSource("servers.xslt"));

    javax.xml.transform.sax.TransformerHandler saxTransformHandler =
((SAXTransformerFactory)tFactory).newTransformerHandler(template);
    saxTransformHandler.setResult(new StreamResult(System.out));

    XMLReader reader =
org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
  reader.setContentHandler(saxTransformHandler);
    reader.parse("severlist.xml");

I then wanted to use a custom SAX parser (which actually generates SAX
events avoiding writting XML and then parsing that XML)

I set this up using this:

    javax.xml.transform.TransformerFactory tFactory =
javax.xml.transform.TransformerFactory.newInstance();
    Templates template = tFactory.newTemplates(new
StreamSource("servers.xslt"));

    javax.xml.transform.sax.TransformerHandler saxTransformHandler =
((SAXTransformerFactory)tFactory).newTransformerHandler(template);
    saxTransformHandler.setResult(new StreamResult(System.out));

    fakeXML(saxTransformHandler);

where fakeXML fires SAX events. A cut-down version of it is:

  public static void fakeXML(ContentHandler ch) throws SAXException
  {
    char charray[];
    String myString;

    ch.startDocument();
    ch.startElement("", "", "serverlist", EMPTY_ATTR);
    ch.startElement("","","serverTypes",EMPTY_ATTR);
    charray = (new String("Master")).toCharArray();
    myString = "Master";
    ch.characters(myString.toCharArray(),0, myString.length());
    ch.endElement("","","serverTypes");

    ch.startElement("","","server",EMPTY_ATTR);
      ch.startElement("","","name",EMPTY_ATTR);
        charray = (new String("ISIS32")).toCharArray();
        ch.characters(charray,0,charray.length);
      ch.endElement("","","serverTypes");
      ch.startElement("","","description",EMPTY_ATTR);
        charray = (new String("Some Junk")).toCharArray();
        ch.characters(charray,0, charray.length);
      ch.endElement("","","description");
      ch.startElement("","","state",EMPTY_ATTR);
        charray = (new String("Sleeping")).toCharArray();
        ch.characters(charray,0,charray.length);
      ch.endElement("","","description");
      ch.startElement("","","info",EMPTY_ATTR);
        charray = (new String("home/vol2/test")).toCharArray();
        ch.characters(charray,0,charray.length);
      ch.endElement("","","info");
    ch.endElement("","","server");

    ch.endElement("","","serverlist");
    ch.endDocument();
  }

This code "generates" the XML that worked with the first example.

However, when I try this, the output from Xalan doesn't have anything
from my generated SAX/XML.

Can anyone point me in the right direction ?

Thanks,

GTG


Gordon Ross,
Network Manager/Rheolwr Rhydwaith
Countryside Council for Wales/Cyngor Cefn Gwlad Cymru