Sax-Parser ließt XML-File doppelt

Otz

Bekanntes Mitglied
Hallo zusammen,

ich habe nach dieser Anleitung: JAVA SAX Parser Beispiel/Tutorial :: Ein Karlsruher Bloggt! einen Sax-Parser gebaut, der mir XML Dateien auslesen soll und daraus Java-Objekte erstellt.

Leider werden alle XML-Knoten doppelt gelesen und in die Array List eingefügt. Warum das gemacht wird? Verstehe ich leider nicht und deshalb benötige ich eure Hilfe!!!
Vielen Dank

Hier ist mein Code:

Java:
		try {
			// XMLReader erzeugen
			XMLReader xmlReader = XMLReaderFactory.createXMLReader();

			// Pfad zur XML Datei
			FileReader reader = new FileReader("E:\\temp\\meintollesxml.xml");
			InputSource inputSource = new InputSource(reader);

			// PersonenContentHandler wird übergeben
			xmlReader.setContentHandler(new PersonenContentHandler());

			// Parsen wird gestartet
			xmlReader.parse(inputSource);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}

PersonenContentHandler.java
Java:
import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;

public class PersonenContentHandler implements ContentHandler {

	private String currentValue;
	private LogMessage message;
	private ArrayList<LogMessage> messageList = new ArrayList<LogMessage>();

	public void characters(char[] ch, int start, int length)
			throws SAXException {
		currentValue = new String(ch, start, length);
	}

	// Methode wird aufgerufen wenn der Parser zu einem Start-Tag kommt
	public void startElement(String uri, String localName, String qName,
			Attributes atts) throws SAXException {
		if (localName.equals("event")) {
			message = new LogMessage();
			message.setMessage(atts.getValue(""));
			// message.setDate(atts.getValue("timestamp"));
			message.setLogLevel(atts.getValue("level"));
			message.setThread(atts.getValue("thread"));
		}

		if (localName.equals("message")) {
			message.setMessage(atts.getValue(currentValue));
		}

	}

	// Methode wird aufgerufen wenn der Parser zu einem End-Tag kommt
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (localName.equals("event")) {
			this.messageList.add(message);
		}
	}

	public void endDocument() throws SAXException {
	}

	public void endPrefixMapping(String prefix) throws SAXException {
	}

	public void ignorableWhitespace(char[] ch, int start, int length)
			throws SAXException {
	}

	public void processingInstruction(String target, String data)
			throws SAXException {
	}

	public void setDocumentLocator(Locator locator) {
	}

	public void skippedEntity(String name) throws SAXException {
	}

	public void startDocument() throws SAXException {
	}

	public void startPrefixMapping(String prefix, String uri)
			throws SAXException {
	}
}

XML-Datei
Code:
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:eventSet version="1.2" xmlns:log4j="http://jakarta.apache.org/log4j/">
	<log4j:event logger="jacorb.config" timestamp="1415094724878" level="WARN" thread="main">
		<log4j:message><![CDATA[this is my test message]]></log4j:message>
	</log4j:event>
</log4j:eventSet>
 
Zuletzt bearbeitet von einem Moderator:
ahh ich habs gefunden 🙁

ich habe ausversehen die methode, die den parser erzeug doppelt aufgerufen 😀
so einfach kanns manchmal sein

kann also gelöscht werden dieser thread
 

Zurück
Oben