# SAX Programmbeispiel



## Gast2 (21. Nov 2011)

Hallo!

Ich versuche mich über das xml-Parsen zu bilden und finde es echt schwierig.
Dabei habe ich mich mit vielen Lehrtexten im Netz und Buchform beschäftigt und mir bestimmt schon 100 Programmschnipsel angeschaut und 10 verschiedene Codebeispiele versucht umzusetzen. Trotz vielen Ausprobieren und Rumbastel habe ich es nicht geschafft aus einer xml bestimmte Elemente oder Inhalte anzeigen zu lassen.
Mein Ausgangspunkt ist übrigens, dass ich per http mir eine xml schicken lasse. Diese hätte ich dann gerne geparst und mir irgendwelche bestimmte Element (als Übungbeispiel) anzeigen lassen.

Weiß jemand irgend ein Beispielprogramm im Netz, welches komplett und mit entsprechenden Änderungen (wie URL/URI und Elementnamen) lauffähig ist? ???:L

Wäre dankbar! Frank


----------



## SlaterB (21. Nov 2011)

das 101. Programmschnipsel soll es bringen?

du hast da aber auch zwei vollkommen getrennte Themen, die musst du einzeln behandeln,
hier in der "XML und Co."-Area im Thema "SAX Programmbeispiel" werden die wenigsten vorbeikommen um einen http-Download zu besprechen,
kann natürlich auch sein dass du das schon fertig hast, an Beispielen ist dann nur eine Datei von der Festplatte interessant,

mit "URL/URI und Elementnamen" beziehst du dich allein auf XML-Probleme, hat nichts mit http zu tun?
was genau funktioniert denn mit einem wahllosen ersten Programmschnipsel aus dem Netz nicht?
XML tutorial: A simple SAX example
welche Testdatei verwendest du, was konkret funktioniert nicht?


----------



## Gast2 (22. Nov 2011)

SlaterB hat gesagt.:


> XML tutorial: A simple SAX example



Dann werde ich mich mal an diesem simpel Beispiel abarbeiten.
Ich habe den Source code in Eclipse eingefügt und die entsprechende JAR importiert und eingebunden (SAX: Simple API for XML - Browse Files at SourceForge.net).

So wie das Beispiel ist, bekomme ich beim Start diese Fehlermeldung


> Launch Error
> Editor does not contain a main type



Was ja nun eigentlich nicht stimmt. 
Zumindest hat die Beispielklasse die Funktion:

```
public static void main(String[] args) {...}
```

Also habe ich die main rausgenommen und in eine Extraklasse gesteckt (SAX_Start.java).
Sieht so weit auch gut aus, aber beim Start erhalte ich die Fehlermeldung:


> java.lang.NoClassDefFoundError: sax/SAX_Start
> Caused by: java.lang.ClassNotFoundException: sax.SAX_Start
> at java.net.URLClassLoader$1.run(Unknown Source)
> at java.security.AccessController.doPrivileged(Native Method)
> ...



Ich habe keine Idee, wie ich weiterkommen kann. :rtfm:
Vielleicht aber jemand anderes...?

Sonnige Grüße! Frank


----------



## SlaterB (22. Nov 2011)

das ist in der Tat ein Punkt, Library zu Library, evtl. gar Version zu Version unterschiedlich,
wenn du jetzt aber eine gefunden hast, ist es doch naheliegend, dort auch nach Codebeispielen zu schauen

SAX



```
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

import java.io.FileReader;


public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        XMLReader xr = XMLReaderFactory.createXMLReader();
        MySAXApp handler = new MySAXApp();
        xr.setContentHandler(handler);
        xr.setErrorHandler(handler);

        xr.parse(new InputSource(new FileReader("log4j.xml")));
    }
}


class MySAXApp
    extends DefaultHandler
{
    public void startElement(String uri, String name, String qName, Attributes atts)
    {
        if ("".equals(uri))
            System.out.println("Start element: " + qName);
        else
            System.out.println("Start element: {" + uri + "}" + name);
    }

    public void endElement(String uri, String name, String qName)
    {
        if ("".equals(uri))
            System.out.println("End element: " + qName);
        else
            System.out.println("End element:   {" + uri + "}" + name);
    }
}
```
läuft bei mir, wenn ich aus einer Beispiel-log4j die DTD-Angabe rausnehme, weil ansonsten diese zugehörige DTD nicht gefunden wird


----------



## Gast2 (23. Nov 2011)

Hey SlaterB,

ich danke Dir für Dein Programmbeispiel.
Damit habe ich mein erstes funktionierendes Programm zum parsen zum laufen gebracht.:applaus:
Mir fällt ein Stein vom Herzen, weil ich habe lange gebraucht. 

Herzliche Grüße!
Frank


----------

