jeudi 28 mai 2015

Sax-Parser ließt XML-File doppelt

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:

Code:

                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
Code:

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://ift.tt/1LMFRmU;
<log4j:eventSet version="1.2" xmlns:log4j="http://ift.tt/Uchr2c;
        <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>



Sax-Parser ließt XML-File doppelt

0 commentaires:

Enregistrer un commentaire