SAX Probleme beim lesen

Status
Nicht offen für weitere Antworten.
C

(c)hris

Mitglied
Hallo zusammen,

ich habe folgendes Problem:

Ich parse eine XML-Datei mit SAX, habe also meinen eigenen "DefaultHandler" geschrieben.
Soweit so gut. Mit kleinen Testdateien funktioniert die Sache ganz gut.

In der XML-Datei gibt es ein Datumsfeld welches ich auslese und mittels DateFormat in ein Date wandle.
Hierbei stelle ich fest, daß ich recht häfig folgendes bekomme

java.text.ParseException: Unparseable date: ":47:37+02:00"

Der Tag in der Datei ist dieser "2006-05-03T12:47:37+02:00"

Es sieht für mich aus, als würde der Parser bis zu einem bestimmten Puffer lesen und dann verarbeiten, nur das der Date-Tag hier nicht komplett ist.

Hat jemand eine Idee wie ich das vermeiden kann.

hier noch mein Sourcecode:

Code:
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;


public class Test extends DefaultHandler
{
	private String CurrentNodeValue;
	private Changeprocess cp;
	private ChangeSignature cs;
	private List<Changeprocess> list = new ArrayList<Changeprocess>();
	private ChangeObject co;
	private ChangeId id;
	
	public static void main(String[] args) throws ParserConfigurationException,IOException
	{
		Test test = new Test();
		SAXParserFactory factory = SAXParserFactory.newInstance();
		//factory.setValidating(false);
		SAXParser saxParser;
		try
		{
			saxParser = factory.newSAXParser();
			saxParser.parse(new File("F:\\Daten\\test.xml"), test);
			for(Changeprocess c: test.list)
			{
				System.out.println(c);
				System.out.println("-----------------------------------------------------------");
			}
		} catch (SAXParseException err) 
		{
			err.printStackTrace();
		} catch (SAXException e)
		{
			e.printStackTrace();
		}
		

	}


	public static Date translateDate(String str)
	{
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'H:mm:ss");
		Date date=null;
		try
		{
			date = df.parse(str);
		} catch (ParseException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return date;
	}
	public void endElement(String uri, String localName, String qName) throws SAXException
	{
		if(qName.equals("operator"))
		{
			cp.setOperator(CurrentNodeValue);
		}
		else if(qName.equals("begin_date"))
		{
			cp.setBegin_date(translateDate(CurrentNodeValue));
		}
		else if(qName.equals("change_type"))
		{
			cp.setChange_type(CurrentNodeValue);
		}
		else if(qName.equals("change_status"))
		{
			cp.setChange_status(CurrentNodeValue);
		}
		else if(qName.equals("ds_count_required"))
		{
			cp.setDs_count_required(Integer.parseInt(CurrentNodeValue));
		}
		else if(qName.equals("ticket"))
		{
			cp.setTicket(CurrentNodeValue);
		}
		else if(qName.equals("ticket"))
		{
			cp.setTicket(CurrentNodeValue);
		}
		else if(qName.equals("signature_date"))
		{
			cs.setSignature_date(translateDate(CurrentNodeValue));
		}
		else if(qName.equals("signature"))
		{
			cs.setSignature(CurrentNodeValue);
		}
		else if(qName.equals("serial_key_number"))
		{
			cs.setSerial_key_number(Integer.parseInt(CurrentNodeValue));
		}
		else if(qName.equals("id"))
		{
			id.setValue(CurrentNodeValue);
		}
	}

	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
	{
		if(qName.equals("changeprocess"))
		{
			cp = new Changeprocess();
			list.add(cp);
			
			int length = attributes.getLength(); 
	        for(int a = 0; a<length; ++a ) 
	        {
	        	String attribqName = attributes.getQName(a);
	        	if(attribqName.equals("client_id"))
	        	{
	        		cp.setClient_id(Integer.parseInt(attributes.getValue(a)));
	        	}
	        	else if(attribqName.equals("chg_process_id"))
	        	{
	        		cp.setChg_process_id(Long.parseLong(attributes.getValue(a)));
	        	}
	        }
		}
		else if(qName.equals("changesignature"))
		{
			cs = new ChangeSignature();
			cp.addSignature(cs);
			
			int length = attributes.getLength(); 
	        for(int a = 0; a<length; ++a ) 
	        {
	        	String attribqName = attributes.getQName(a);
	        	if(attribqName.equals("operator"))
	        	{
	        		cs.setOperator(attributes.getValue(a));
	        	}
	        }
		}
		else if(qName.equals("object"))
		{
			co = new ChangeObject();
			cp.addChangeobject(co);
			
			int length = attributes.getLength(); 
	        for(int a = 0; a<length; ++a ) 
	        {
	        	String attribqName = attributes.getQName(a);
	        	if(attribqName.equals("type"))
	        	{
	        		co.setType(attributes.getValue(a));
	        	}
	        	else if(attribqName.equals("change_valid_state"))
	        	{
	        		co.setChange_valid_state(attributes.getValue(a));
	        	}
	        	else if(attribqName.equals("pk_fields"))
	        	{
	        		co.setPk_fields(attributes.getValue(a));
	        	}
	        }
		}
		else if(qName.equals("id"))
		{
			id = new ChangeId();
			int length = attributes.getLength(); 
	        for(int a = 0; a<length; ++a ) 
	        {
	        	String attribqName = attributes.getQName(a);
	        	if(attribqName.equals("type"))
	        	{
	        		id.setType(attributes.getValue(a));
	        	}
	        }
	        co.addChangeId(id);
		}
	}

	public void characters(char[] buf, int offset, int len)
	{
		String s = new String(buf,offset,len);
		if(s.indexOf ( "\n" )   <  0 && s.length() > 0)
		{
			this.CurrentNodeValue = s;
		}
	}
}
 
Zed

Zed

Bekanntes Mitglied
Hm ganz ehrlich gesagt kein Plan warum das passiert.

Vielleicht interpretiert der den : als Trennzeichen.

Ich würde es vielleicht gleich mit einem Timetamp probieren.

Auf den zweiten Blick
SimpleDateFormat("yyyy-MM-dd'T'H:mm:ss") passt das irgendwie nicht zu 2006-05-03T12:47:37+02:00

SimpleDateFormat("yyyy-MM-dd'T'H:mm:ssZ") dann sollte das Datum ungefähr so aussehen 2006-05-03T12:47:37+0200
 
C

(c)hris

Mitglied
Erstmal Danke.

Das Scheitern der Datekonvertierung ist aber nur das Endergebnis.

Wenn ich das Datum nur als String verarbeite wird es abgeschnitten:

Ich packe die Daten alle in eine Bean jedoch wird diese nicht komplett gefüllt.

z.B.

Wert in der XML-Datei -> Wert in der Bean
2006-05-03T12:47:37+02:00 -> :47:37+02:00
2006-05-03T12:47:37+02:00 -> 2006-05-
2006-05-03T12:47:37+02:00 -> 05-03T12:47:37+02:00
2006-05-03T12:47:37+02:00 -> +02:00
2006-05-03T12:47:37+02:00 -> 3T12:47:37+02:00
usw.^

ps. Das Problem ist leider auch, daß ich auf die XML-Datei keinen Einfluß habe. Die bekomme ich aus einem anderen System.
 
G

Guest

Gast
hallo,
ich vermute das die content methode 2mal hintereinander aufgerufen wird.
versuch es mal mit
Code:
this.CurrentNodeValue = this.CurrentNodeValue + s;
anstatt
Code:
this.CurrentNodeValue = s;
 
K

kleiner_held

Top Contributor
Ja, die characters(...) Methode kann mehrmals für die gleiche Node aufgerufen werden.
Ich würde aus Performancegründen einen StringBuilder als Puffer verwenden.
In der endElement Methode musst du auf alle Fälle nach dem auswerten des Contents den Puffer wieder leeren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
L Jackson JSON: Probleme beim einlesen XML & JSON 1
hdi Probleme beim Erstellen einer XML XML & JSON 7
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
H JAXB Probleme beim Unmarshalling XML & JSON 3
S Probleme beim erstellen einer Jar XML & JSON 12
D Probleme beim SAX parsing XML & JSON 4
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
R JAVA und DOM, probleme beim einfügen von elementen ?????? XML & JSON 6
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
G Probleme mit Jsoup in .jar File XML & JSON 11
K JAX-WS Bindin-Probleme XML & JSON 1
B Probleme mit RelativeLayout XML & JSON 1
K XOM Builder Probleme XML & JSON 3
N Jsoup: PHP-Tags bereiten Probleme? XML & JSON 2
M SAX-Parsing Probleme XML & JSON 23
M Probleme mit XPath bei Java XML & JSON 5
G Probleme mit XML und JTree XML & JSON 9
klattiator Probleme mit Codierung XML & JSON 3
T XML und Sonderzeichen, Probleme mit ASP.NET Server XML & JSON 2
G Probleme mit Namespaces XML & JSON 5
D Probleme mit Eclipse Modeling Framework (EMF) XML & JSON 2
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
F JAXB - Nachträglich hinzugefügter Code macht Probleme XML & JSON 2
P Probleme mit JDom . addContent(int index,Collection c) XML & JSON 2
F Unmarshall Probleme XML & JSON 5
R Probleme mit Transformer und StreamResult XML & JSON 4
C Probleme mit Include XML & JSON 10
C POI + jXLS Probleme XML & JSON 3
B DOM DTD laden abschalten, Probleme mit Doctypes und PIs XML & JSON 2
S Probleme mit Jdom XML & JSON 3
G probleme mit package XML & JSON 12
M Probleme mit String XML & JSON 3
H Probleme mit xmlrpc und php XML & JSON 13
B Probleme mit Zugriff auf eXist-Datenbank XML & JSON 9
H Neu bei JAVA- Probleme mit der Integration von Xerces XML & JSON 3
P Probleme mit jdom XML & JSON 5
S Hilfe beim RDF-Graphen XML & JSON 0
R Beim Serialisieren fehlt die letzte Zeile XML & JSON 5
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
A XML-Fehler beim Prefix von xmlns XML & JSON 2
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
G Langsam beim SAX-Parsen - woran liegts? XML & JSON 2
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
B Validierung nur beim einlesen oder auch beim schreiben? XML & JSON 4
D JAXBException beim Marshaller XML & JSON 4
M Read / write Problem beim ByteStrom XML & JSON 2
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
J Dateinamen beim Start auslesen XML & JSON 8
F Hilfe beim bearbeiten von XML elemente XML & JSON 3
N XStream ConversionException beim Deserialisieren in (Hibernate)Objekt XML & JSON 6
G Problem beim schreiben von XML in eine File XML & JSON 2
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
sylo Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen? XML & JSON 11
B Problem beim löschen von ChildNodes aus einem XML-DOM XML & JSON 3
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
N Hilfe beim Einstieg in EMF XML & JSON 6
D Das Programm hängt etwa 5 Sekunden beim Aufruf der parse-Methode XML & JSON 6
D Tabs/Einrückungen der XML-Elemente gehen beim Schreiben verloren XML & JSON 5
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
G XML Tag beim Einlesen manipulieren XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
N jdom problem beim lesen von child elementen XML & JSON 5
P NullPointerException beim Auslesen XML & JSON 8
M Performance beim Binding XML & JSON 2
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
J Fehler beim laden einer .xml XML & JSON 3
G DOCTYPE Problem beim Transformer/TransformerFactory etc. XML & JSON 13
P OutOfMemoryError beim Einlesen einer XML-Datei XML & JSON 7
P Problem beim erstellen eines neuen Elements (JDOM) XML & JSON 5
S JDOM-Kein indent beim XMLOutputter XML & JSON 4
C Zeile herausfinden in der ein Fehler beim Einlesen entsteht XML & JSON 3
V Datenverlust nach sortieren (nur beim serialisieren) XML & JSON 4
S Problem beim Erstellen eines pdfs XML & JSON 3
R Problem beim Auslesen von Attributen XML & JSON 4
C einfach XML lesen XML & JSON 4
JBoby Yaml File lesen und in Objekte umwandel (SnakeYAML / YamlBeans) XML & JSON 0
E Einzelne Tags der context.xml lesen XML & JSON 1
W Json von URL Lesen (mit Gson Library) XML & JSON 3
W Json von URL Lesen XML & JSON 2
G Jsoup Daten lesen XML & JSON 0
F KindElemente lesen und begrenzen XML & JSON 0
P Bestimmte XML-Inhalte in String lesen XML & JSON 2
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
P Komfortabel XML Dokumente schreiben und lesen XML & JSON 6
Maxim6394 Lesen/Schreiben von XML Datei XML & JSON 9
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
R XLM Datei lesen Ändern (kompliziertes Search and Replace) und Speichern XML & JSON 12
S XML lesen und schreiben XML & JSON 2
Q Atom/RSS-Feed lesen - per XSD zu Java-Code XML & JSON 4
K JAXB: Klassen mit Annotation Lesen/Schreiben XML XML & JSON 3
O PDF mit Pdfbox lesen XML & JSON 3
S XMLStreamReader, letzten eintrag eines xml lesen? XML & JSON 5
N MalformedByteSequenceException bei Lesen aus XML Datei XML & JSON 2
Mike90 Daten aus DB in ExcelTabelle lesen + bearbeiten + formatieren XML & JSON 2
Mike90 -xlsx Dateien in Java lesen XML & JSON 3
Fadi .classpath(XML) mit Java lesen XML & JSON 2
J Logdaten als XML speichern und lesen XML & JSON 2
J XML lesen schreiben XML & JSON 7

Ähnliche Java Themen


Oben