Example 14-5: Utility to load any size document into any number of tables

import java.net.*;
import java.io.*;
import java.sql.Connection;
import oracle.xml.parser.v2.XSLStylesheet;
import URLUtils;
import ConnectionFactory;
import XMLDocumentSplitter;

public class XMLLoader {

  private static String  dateFormat  = null;
  private static String  docElement  = null;
  private static Connection    conn  = null;
  private static String  connName    = "default";
  private static URL     file;
  private static URL     trans;
  private static boolean ignoreErrs  = false;
  private static XSLStylesheet sheet = null;
  public static void main( String[] args ) throws Exception {
    try {
      processArgs(args);
      conn = ConnectionFactory.getConnection(connName);
      if (trans != null) {
        try {
          sheet = new XSLStylesheet(trans,trans);
        }
        catch (Exception xe) {
          System.err.println("Error loading stylesheet " + trans);
          System.exit(1);
        }
      }
      // Create a Multi-table Insert Handler
      MultiTableInsertHandler mtih =
         new MultiTableInsertHandler(conn,sheet,ignoreErrs);

      // Set the date format for the insert handler (null is ok)
      mtih.setDateFormat(dateFormat);

      // Use an XMLDocumentSplitter to handle large documents, passing
      // MultiTableInsertHandler to be used for each "SubDocument" found
      XMLDocumentSplitter splitter = new XMLDocumentSplitter( mtih );

      // Process the input document, splitting it into subdocs to be
      // handled based on the specified docElement.
      splitter.split(file,docElement);

      System.out.println("Processed " + mtih.getItemsHandled() + " Documents");
      conn.close();
    }
    catch(Exception ex) {
      System.err.println("Error: " + ex.toString());
    }
  }

  private static void processArgs(String[] arg) throws Exception {
    int args = arg.length;
    for (int q=0; q<args; q++) {
      String cur = arg[q];
      if (cur.equals("-connName")) {
        connName = q!=args ? arg[q+1] : null;
      }
      if (cur.equals("-docTag")) {
        docElement = q!=args ? arg[q+1] : null;
      }
      if (cur.equals("-transform")) {
        trans = q!=args ? URLUtils.newURL(arg[q+1]) : null;
      }
      if (cur.equals("-file")) {
        file = q!=args ? URLUtils.newURL(arg[q+1]) : null;
      }
      if (cur.equals("-ignoreErrors")) {
        ignoreErrs = true;
      }
      if (cur.equals("-dateFormat")) {
        dateFormat = q!=args ? arg[q+1] : null;
      }
    }
    if (file == null) {
      System.err.println("usage: XMLLoader -file filename");
      System.err.println("[-connName connectionName]" );
      System.err.println("[-docTag tagname]" );
      System.err.println("[-ignoreErrors]" );
      System.err.println("[-transform stylesheet.xsl]");
      System.err.println("[-dateFormat yyyy-MM-d]");
      System.exit(1);
    }
  }
}