# Wie lese ich XML-Dateien mit dem javax.xml.parsers.SAXParser?



## schnuffie (1. November 2004)

Hallo XLM-Gurus,

wie lese ich XML-Dateien mit dem javax.xml.parsers.SAXParser?
Für's Verständnis würde mir schon ein kleines Code-Schnipsel genügen... :suspekt: 


```
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE xmldoc [
<!ELEMENT xmldoc (urlliste, info)>
	<!ELEMENT urlliste (urleintrag+)>
	 <!ELEMENT urleintrag (ueberschrift, (url, urlname)+, bemerkung?)>
		<!ELEMENT ueberschrift (#PCDATA)>
		<!ELEMENT url (#PCDATA)>
		<!ELEMENT urlname (#PCDATA)>
		<!ELEMENT bemerkung (#PCDATA)>
		<!ATTLIST url urltyp (lokal|intern|extern) #REQUIRED>
	 <!ATTLIST urlliste nummer CDATA "ohne"> 
	<!ELEMENT info (#PCDATA)>
]>
<xmldoc>
<urlliste>
</urlliste>
<urlliste>
</urlliste>
<info>
Bla
</info>
<info>
bla
</info>
</xmldoc>
```
 
Danke. CU schnuffie


----------



## Thomas Darimont (1. November 2004)

Hallo!

SAXParser sind sogenannte Event Basierte XML Parser. D.h. du definierst etwa einen ContentHandler (den du z.Bsp. vom DefaultHandler ableitest) dessen Methoden dann vom Parser aufgerufen werden wenn der Parser in dem XML Dokument an einem Element vorbei kommt, für welches du eine Behandlungsroutine implementiert hast. SO kannst du nun selber steuern was beim Auftreten eines bestimmten Elements geschehen soll.

Aber schau mal hier:


```
package de.tutorials;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

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

public class Test38 {

	public static void main(String[] args) {
		new Test38().doIt();
	}

	private void doIt() {
		try {
			XMLReader reader = XMLReaderFactory.createXMLReader();
			reader.setContentHandler(new DefaultHandler() {
				//Hier die jeweiligen Methoden des DefaultHandlers implementieren
				public void startElement(String uri,
                        String localName,
                        String qName,
                        Attributes attributes)
                 throws SAXException{
					System.out.println(qName);
				}
			});
			reader.parse(new InputSource(new FileInputStream("c:/test.xml")));

		} catch (SAXException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
```

Gruß Tom


----------



## schnuffie (1. November 2004)

Das ist doch schon mal ein guter Anfang.

Wie könnte ich jetzt der Reihe nach die Inhalte aller "<info>"-Tags einlesen?

Muß ich für jeden Tag die XML-datei erneut parsen?


----------

