Duplicates XML Files : SAX « XML « Java






Duplicates XML Files

      
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;

public class SAXCopy {
  static public void main(String[] arg) {
    String infilename = null;
    String outfilename = null;
    if (arg.length == 2) {
      infilename = arg[0];
      outfilename = arg[1];
    } else {
      usage();
    }

    try {
      SAXParserFactory spf = SAXParserFactory.newInstance();
      SAXParser parser = spf.newSAXParser();
      XMLReader reader = parser.getXMLReader();
      reader.setErrorHandler(new MyErrorHandler());
      FileOutputStream fos = new FileOutputStream(outfilename);
      PrintWriter out = new PrintWriter(fos);
      MyCopyHandler duper = new MyCopyHandler(out);
      reader.setContentHandler(duper);
      InputSource is = new InputSource(infilename);
      reader.parse(is);
      out.close();
    } catch (SAXException e) {
      System.exit(1);
    } catch (ParserConfigurationException e) {
      System.err.println(e);
      System.exit(1);
    } catch (IOException e) {
      System.err.println(e);
      System.exit(1);
    }
  }

  private static void usage() {
    System.err.println("Usage: SAXCopy <infile> <outfile>");
    System.exit(1);
  }
}

class MyCopyHandler implements ContentHandler {
  private boolean namespaceBegin = false;

  private String currentNamespace;

  private String currentNamespaceUri;

  private Locator locator;

  private PrintWriter out;

  public MyCopyHandler(PrintWriter out) {
    this.out = out;
  }

  public void setDocumentLocator(Locator locator) {
    this.locator = locator;
  }

  public void startDocument() {
    out.println("<?xml version=\"1.0\"?>");
    out.println();
  }

  public void endDocument() {
  }

  public void startPrefixMapping(String prefix, String uri) {
    namespaceBegin = true;
    currentNamespace = prefix;
    currentNamespaceUri = uri;
  }

  public void endPrefixMapping(String prefix) {
  }

  public void startElement(String namespaceURI, String localName,
      String qName, Attributes atts) {
    out.print("<" + qName);
    if (namespaceBegin) {
      out.print(" xmlns:" + currentNamespace + "=\""
          + currentNamespaceUri + "\"");
      namespaceBegin = false;
    }
    for (int i = 0; i < atts.getLength(); i++) {
      out.print(" " + atts.getQName(i) + "=\\" + atts.getValue(i) + "\"");
    }
    out.print(">");
  }

  public void endElement(String namespaceURI, String localName, String qName) {
    out.print("</" + qName + ">");
  }

  public void characters(char[] ch, int start, int length) {
    for (int i = start; i < start + length; i++)
      out.print(ch[i]);
  }

  public void ignorableWhitespace(char[] ch, int start, int length) {
    for (int i = start; i < start + length; i++)
      out.print(ch[i]);
  }

  public void processingInstruction(String target, String data) {
    out.print("<?" + target + " " + data + "?>");
  }

  public void skippedEntity(String name) {
    out.print("&" + name + ";");
  }
}

class MyErrorHandler implements ErrorHandler {
  public void warning(SAXParseException e) throws SAXException {
    show("Warning", e);
    throw (e);
  }

  public void error(SAXParseException e) throws SAXException {
    show("Error", e);
    throw (e);
  }

  public void fatalError(SAXParseException e) throws SAXException {
    show("Fatal Error", e);
    throw (e);
  }

  private void show(String type, SAXParseException e) {
    System.out.println(type + ": " + e.getMessage());
    System.out.println("Line " + e.getLineNumber() + " Column "
        + e.getColumnNumber());
    System.out.println("System ID: " + e.getSystemId());
  }
}

//Example XML document
/*  An XML Document

<?xml version="1.0" standalone="yes"?>
<person>
     <name>Joe Wang</name>
     <phone type="home">306 555-9999</phone>
     <email>joe@yoursite.net;</email>
</person>


*/

           
         
    
    
    
    
    
  








Related examples in the same category

1.Parsing XML Files with SAX
2.SAX Demo
3.A Program to Display the Input from a SAX ParserA Program to Display the Input from a SAX Parser
4.SAX Checker
5.A Content Handler to Output a Sorted List as HTML
6.A Content Handler to Output a Sorted List
7.Simple lister - extract name and children tags
8.SAX Tree Validator
9.SAX Tree ViewerSAX Tree Viewer
10.Accessing character data (CDATA) of XML element
11.Accessing features of the SAX parser implementation
12.Configuring SAX parser factory to produce alternate parser
13.Extracting attribute values from XML elements
14.Handling SAX errors during parsing
15.Using XML locator to indicate current parser position
16.Filter to write an XML document from a SAX event stream
17.XML utility methods that only depend on the JDK
18.Utility class for xml/sax handling
19.Create Xml Reader
20.Sax to DOM converter
21.Produce a SAX stream from a DOM Document
22.SAX2 writer: register a SAX2 ContentHandler and receive the callbacks in order to print a document that is parsed.
23.Register a SAX2 ContentHandler and receive callbacks to print information about the document.
24.Provides a complete trace of SAX2 events for files parsed.
25.The program prints all hyperlinks links of an XHTML web page