XML Dokumente mit Java und SAX parsen


Das nachfolgende Beispiel parst einige Tags einer PAD Datei. Mit diesem Dateiformat können Sie Software beschreiben, welche Sie Softwarekatalogen im Internet eintragen möchten. Es ist insoweit ein (endlich) struktierter Nachfolger der DIZ Dateien.

Als erstes unsere kleine Startklasse. Die Aufgaben sind einfach gehalten.

  1. Erzeuge ein Objekt, welches unser XML Dokument einlesen kann.
  2. Teile dem Objekt mit, dass wir einen eigenen Verarbeiter (ContentHandler) für unsere PAD Dateien haben.
  3. Verarbeite unsere PAD Datei.
  4. package de.bastie.xml.sax;
    
    import java.io.IOException;
    
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.XMLReaderFactory;
    
    /**
     * Ein Beispiel für die Arbeit mit eigenen SAX Handlern.
     * @author Bastie - Sebastian Ritter
     * @version getestet mit Java 1.5
     */
    public class SampleSaxHandler {
    
      public void teach () {
        try {
          // einen XML Reader erzeugen
          XMLReader reader = XMLReaderFactory.createXMLReader();
          // den eigenen Sax Content Handler registrieren
          reader.setContentHandler(new PadSaxHandler ());
          // unsere Beispiel XML Datei parsen
          reader.parse(new InputSource (this.getClass().getResourceAsStream("makedesktopview_pad.xml")));
        }
        catch (final SAXException e) {
          e.printStackTrace();
        }
        catch (final IOException e) {
          e.printStackTrace();
        }
      }
    
      public static void main (final String [] args) {
        SampleSaxHandler padSample = new SampleSaxHandler ();
        padSample.teach();
      }
    
    }
    

    Als zweites haben wir den wichtigen Teil - unsere SAX-Verarbeitungsklasse. Dieses muss vom Typ ContentHandler sein, wobei wir der Einfachheit halber von DefaultHandler ableiten.

    package de.bastie.xml.sax;
    
    import java.util.HashMap;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    /**
     * Ein spezieller Handler für die Verarbeitung von PAD Dateien.
     * Diese dienen zur Beschreibung von Software in Webkatalogen.
     * @author Bastie - Sebastian Ritter
     * @version getestet mit Java 1.5
     */
    public class PadSaxHandler extends DefaultHandler {
    
      private int tagHashCode = 0;
    
      /**
       * Ein paar interne Variablen zur Verarbeitung, diese enthalten unsere
       * PAD-XML-Tags, die wir auswerten wollen.
       */
      final private static transient String COMPANY_WEBSITE_URL = "Company_WebSite_URL",
                                            PROGRAM_NAME        = "Program_Name",
                                            PROGRAM_VERSION     = "Program_Version",
                                            PROGRAM_TYPE        = "Program_Type",
                                            PROGRAM_LANGUAGE    = "Program_Language",
                                            FILENAME_LONG       = "Filename_Long",
                                            FILE_SIZE_BYTES     = "File_Size_Bytes",
                                            SHORT_DESCRIPTION   = "Char_Desc_45",
                                            LONG_DESCRIPTION    = "Char_Desc_2000";
      private transient static final int COMPANY_WEBSITE_URL = 0,
                                         PROGRAM_NAME = 1,
                                         PROGRAM_VERSION = 2,
                                         PROGRAM_TYPE = 3,
                                         PROGRAM_LANGUAGE = 4,
                                         FILENAME_LONG = 5,
                                         FILE_SIZE_BYTES = 6,
                                         SHORT_DESCRIPTION = 7,
                                         LONG_DESCRIPTION = 8;
    
      private static HashMap<String,Integer> keyMap;
    
      public PadSaxHandler () {
        if (keyMap == null) {
          keyMap = new HashMap<String,Integer> ();
          keyMap.put(COMPANY_WEBSITE_URL, COMPANY_WEBSITE_URL);
          keyMap.put(PROGRAM_NAME, PROGRAM_NAME);
          keyMap.put(PROGRAM_VERSION, PROGRAM_VERSION);
          keyMap.put(PROGRAM_TYPE, PROGRAM_TYPE);
          keyMap.put(PROGRAM_LANGUAGE, PROGRAM_LANGUAGE);
          keyMap.put(FILENAME_LONG, FILENAME_LONG);
          keyMap.put(FILE_SIZE_BYTES, FILE_SIZE_BYTES);
          keyMap.put(SHORT_DESCRIPTION, SHORT_DESCRIPTION);
          keyMap.put(LONG_DESCRIPTION, LONG_DESCRIPTION);
        }
    
      }
    
      public void characters(char[] ch, int start, int length) throws SAXException {
        if (length > 0) {
          final String content = new String (ch,start,length).trim();
          if (content.length() > 0) {
            switch (this.tagHashCode) {
            case COMPANY_WEBSITE_URL :
              System.out.println("URL: "+content);
              break;
            case PROGRAM_NAME :
              System.out.println("Name: "+content);
              break;
            case PROGRAM_VERSION :
              System.out.println("Version: "+content);
              break;
            case PROGRAM_TYPE :
              System.out.println("Lizenz: "+content);
              break;
            case PROGRAM_LANGUAGE :
              System.out.println("Sprache: "+content);
              break;
            case FILENAME_LONG :
              System.out.println("Dateiname: "+content);
              break;
            case FILE_SIZE_BYTES :
              System.out.println("Größe: "+content+" Bytes");
              break;
            case SHORT_DESCRIPTION :
              System.out.println("Kurzbeschreibung: "+content);
              break;
            case LONG_DESCRIPTION :
              System.out.println("Langbeschreibung: "+content);
              break;
            default :
            }
          }
        }
      }
    
      public void endElement (final String uri,
                               final String localName,
                               final String qName) throws SAXException {
        // einfach aufräumen auch wenn unnötig
        this.tagHashCode = -1;
      }
    
      public void startElement (final String uri,
                                final String localName,
                                final String qName,
                                final Attributes attributes) throws SAXException {
        if (keyMap.get(localName) != null)
          this.tagHashCode = keyMap.get(localName);
        else
          this.tagHashCode = -2;
      }
    }
    
    all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.de
    Diese Seite ist Bestandteil der Internetpräsenz unter http://www.Bastie.de


    Java Cobol Software Resourcen Service Links Über mich Zum Gästebuch Forum