# SAXParser problem?



## pid82 (25. Apr 2005)

Hallo an alle habe mich in dieser Woche mit dem Parsen von XMLDateien beschaeftigt.
Leider bin ich auf ein Problem zugestossen.


//Die Datei XMLObjectHandler
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.*;

public class XMLObjectHandler extends DefaultHandler {

    private static int readingNothing = 0;
    private static int readingLiteratur = 1;
    private static int readingName = 2;
    private static int readingFachbereich = 3;
    private static int readingFach = 4;

    private int currentActivity = readingNothing;

    private XMLObject xmlObject = null;


    public XMLObjectHandler()	{
        super();
        xmlObject = new XMLObject();
    }

    public XMLObject getXMLObject()	{
        return xmlObject;
    }

    public void start(String uri, String localName, String qname, Attributes attributes)	{

        if(qname.equalsIgnoreCase("name"))	{
            currentActivity = readingName;
        }else if(qname.equalsIgnoreCase("fachbereich"))	{
            currentActivity = readingFachbereich;
        }else if(qname.equalsIgnoreCase("literatur"))	{
            currentActivity = readingLiteratur;
        }else if(qname.equalsIgnoreCase("fach"))	{
            currentActivity = readingFach;
        }
    }

    public void character(char[] ch, int start, int length)	{
        String value = new String(ch, start, length);

        if(currentActivity == readingName)	{
            xmlObject.setName(value);
        }else if(currentActivity == readingFachbereich)	{
            xmlObject.setFachbereich(value);
        }else if(currentActivity == readingLiteratur)	{
            xmlObject.setLiteratur(value);
        }else if(currentActivity == readingFach)	{
            xmlObject.setFach(value);
        }
    }


}

//Die Datei XMLParser

import javax.xml.parsers.*;
import org.xml.sax.*;
import java.io.File;

public class XMLParser  {

	private XMLObject xmlObject = null;


	public XMLParser()	{	
	    xmlObject = new XMLObject();
	}


	/**
	 * @see SAXParser#parse
	 * @param fileName der Name der XMLDatei
	 * @exception IllegalArgumentException wenn das File Objekt null ist
	 * @exception IOException wenn ein I/O Fehler auftritt
	 * @exception SaxException wenn waehrend dem Arbeiten ein SAX Fehler auftritt
	 * @return	es wird ein ausgefuelltes XMLObject zurueckgegeben
	 * 
	 */
	public XMLObject parseXMLDocument(String fileName)	{

		File input = new File(fileName);
		SAXParserFactory factory =   SAXParserFactory.newInstance();
		XMLObjectHandler xmlObjectHandler = new XMLObjectHandler();

		try	{
		    SAXParser sax = factory.newSAXParser();
		    sax.parse(input, xmlObjectHandler);
		}catch(IllegalArgumentException iae)	{
		    //throw new IllegalArgumentException();
		}catch(SAXException se)	{
		    //throw new SAXException();
		}catch(Exception e)	{

		}

		return (xmlObjectHandler.getXMLObject());
	}



}

Wenn ich jetzt von meiner main methode die in einer anderen Datei ist ein Object der Klasse XMLParser erzeuge
und der Funktion parserXMLDocument einen Dateinamen übergebe verlange ich ein Objekt der Klasse XMLObject 
das normalerweise mit dem Inhalt der XMLDatei ausgefüllt sein muss. Aber hier ist genau das Problem die Elemente meiners Objektes aus der Klasse XMLObject haben alle den Wert null?

Was habe ich falsch gemacht?


----------



## Bleiglanz (25. Apr 2005)

wie sieht denn dein xml aus?

BTW kannst du das so nicht machen, weil Textinhalt zerstückelt werden könnte [d.h. es könnten mehrere character Events kommen]

=> du musst den Text "sammeln" und erst in endElement speichern


----------



## Roar (25. Apr 2005)

sieht so eigentlich eine saubere sax implementierung aus? find ich ja nich so übersichtlich, gibts na sauberere möglichkeiten für sax?


----------

