RE: [xml-dev] Serialization with SAX

From
Johannes Lichtenberger <>
To
Michael Kay <>
Date
2009-01-15T23:41:40Z
ID
<1232062900.6741.15.camel@luna>
Thread
RE: [xml-dev] Serialization with SAX
Am Donnerstag, den 15.01.2009, 22:03 +0000 schrieb Michael Kay:
> You don't want to get the source of a serializer and modify it. You want to
> add a SAX filter into a pipeline. Your filter should simply call the next
> stage in the pipeline (that is, the serializer) for every event until the
> threshold is reached, and do nothing for events after that threshold (except
> of course for closing the outermost element and the document tidily).
> 
> You can write a SAX filter by subclassing XMLFilterImpl, and you can see how
> to use it from a tutorial at
> http://www.cafeconleche.org/slides/sd2000east/sax/74.html 

So I'm not really sure how to use it, something like:

  public ExtractArticles(XMLReader parent) {
    super(parent);
  }
  
  public void parse(InputSource input) throws IOException, SAXException
{
    super.parse(input);
  }
  
  public void parse(String systemId) throws IOException, SAXException {
    parse(new InputSource(systemId)); 
  }

    /**
   * {@inheritDoc}
   */
  public void startElement(String namespaceURI, String localName, String
qName,
      Attributes atts) throws SAXException {

    if (localName.equalsIgnoreCase("page")) {
      counter++;
    }

    if (counter < ARTICLES) {
      super.startElement(namespaceURI, localName, qName, atts);
    }
  }

  ...

  public final static void main(final String args[]) {

    try {
      XMLReader r = XMLReaderFactory.createXMLReader();
      
      new ExtractArticles(r).parse(new InputSource(new
FileInputStream(args[0])));
    } catch (IOException e) {
      System.err.println("I/O exception reading XML document");
    } catch (SAXException e) {
      System.err.println("XML exception reading document.");
    }

  }

But how do I specify the output document?

greetings,
Johannes