Input/Output XML auslesen

Scor3s

Mitglied
Hallo liebe Java-Forum User,
ich versuche bestimmte Informationen aus meinem Programm in eine XML-Datei zu exportieren. Danach soll es möglich sein diese Informationen (Einstellungen) wieder zu laden. Hierzu habe ich mir zwei Listener geschrieben. Problem dabei ist, das beim Versuch die Datei zu lesen immer ein "[Fatal Error] :1:1: Content ist nicht zulässig in Prolog." kommt.

Auszug aus der XMLDatei... Natürlich eigentlich nicht so Formatiert. Inhalt ist jedoch der gleiche.
[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<CAS_Automaton>
<population>
<name>automaton</name>
<torus>true</torus>
<states>8</states>
<reihen>2</reihen>
<spalten>2</spalten>
</population>
<cells>
<cell collumn="0" row="0" state="1"/>
<cell collumn="1" row="0" state="2"/>
<cell collumn="0" row="1" state="5"/>
<cell collumn="1" row="1" state="3"/>
</cells>
</CAS_Automaton>[/XML]

Auszug aus dem readXMLListener
Java:
...
			try {
				DocumentBuilderFactory docFac = DocumentBuilderFactory.newInstance();
				DocumentBuilder docBui = docFac.newDocumentBuilder();
				Document doc = docBui.parse(file);
				doc.getDocumentElement().normalize();
			} catch (Exception ex) {
				JOptionPane
				.showMessageDialog(
						null,
						"<html><font color=red>Load failed\n" + ex.toString());
			}
		}

Der Fehler taucht an folgender Stelle auf:
Java:
Document doc = docBui.parse(file);


Gruß
 

Scor3s

Mitglied
Danke für die schnelle Antwort. Nein es sieht folgendermaßen aus:
[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?><CAS_Automaton><population><name>internalautomata.KruemelmonsterAutomaton</name><torus>true</torus><states>8</states><reihen>2</reihen><spalten>2</spalten></population><cells><cell collumn="0" row="0" state="1"/><cell collumn="1" row="0" state="7"/><cell collumn="0" row="1" state="7"/><cell collumn="1" row="1" state="1"/></cells></CAS_Automaton>[/XML]
 
N

nillehammer

Gast
Habe Dein XML mal genommen und in Eclipse reinkopiert. Der Eclipse Validator meckerte nicht. Dann habe ich Deinen Code (Zeilen 3 bis 6) genommen, um das File zu parsen. Ging auch alles. Dann hab ich noch bischen rumgespielt, um Fehler zu provozieren:
- Die Zeilenumbrüche und Leerzeichen gelöscht -> geht trotzdem
- Die Datei absichtlich mit einem falschen Encoding gespeichert (US-ASCII und ISO-8859-1) -> geht trotzdem

Konnte Deinen Fehler also leider nicht reproduzieren und habe deswegen auch keine Lösung, sondern nur zwei Gegenfragen:
- In welchem Encoding ist die Datei gespeichert?
- Welchen Parser verwendest Du? Den Standardparser des JDK (Xerces) oder einen anderen?
 

Scor3s

Mitglied
Ohh, danke für die Mühe :)

In welchem Encoding ist die Datei gespeichert?
-> UTF-8
Welchen Parser verwendest Du? Den Standardparser des JDK (Xerces) oder einen anderen?
Ich weiß nicht genau wo ich das Nachschaue, deshalb hier ein paar Imports:
Java:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

Danke, Gruß
 
N

nillehammer

Gast
Ich weiß nicht genau wo ich das Nachschaue, deshalb hier ein paar Imports:
Dann nehme ich an, dass Du den Standardparser verwendest. Wenn Du explizit einen anderen eingebunden hättest, wüsstest Du es ja. Ich hab's auch nur im Stacktrace einer Exception gesehen:
Java:
// Im package Namen taucht xerces auf
[Fatal Error] NewFile.xml:1:1: Content ist nicht zulässig in Prolog.
Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/C:/nille/projects/AssetListGenerator/src/test/resources/NewFile.xml; lineNumber: 1; columnNumber: 1; Content ist nicht zulässig in Prolog.
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:254)
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
	at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
// Im package Namen taucht xerces auf
Ich hab jetzt -wie Du siehst- auch Deinen Fehler reproduzieren können. Er kommt, wenn das erste Zeichen ein druckbares Zeichen (also nicht Leerzeichen, Tab o.ä.) ist, welches nicht die öffnende spitze Klammer ist.

Wie auch immer der XML-Stream bei Dir ankommt:
  • entweder es steht ein Zeichen vor dem Prolog, z.B.
    Code:
    \<?xml ...
  • oder evtl. ist/sind am Anfang Zeichen verschluckt,
    Code:
    ?xml ...
    (spitze Klammer verschluckt)
Eins von beiden muss es sein, sonst gäbe es den Fehler nicht.
 
Zuletzt bearbeitet von einem Moderator:

Scor3s

Mitglied
Das war auch meine Vermutung. Aber egal mit welchem Programm ich die Datei öffne, es ist immer der Korrekte XML-Code zu sehen.

Die XML Datei test.xml
[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?><CAS_Automaton><population><name>internalautomata.KruemelmonsterAutomaton</name><torus>true</torus><states>8</states><reihen>1</reihen><spalten>1</spalten></population><cells><cell collumn="0" row="0" state="6"/></cells></CAS_Automaton>[/XML]

Genaue Fehlermeldung:

Code:
[Fatal Error] :1:1: Content ist nicht zulässig in Prolog.
org.xml.sax.SAXParseException; systemId: file:/F:/Java/CAS-Projekt/./; lineNumber: 1; columnNumber: 1; Content ist nicht zulässig in Prolog.
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
	at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
	at controller.ReadXMLAL.actionPerformed(ReadXMLAL.java:46)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.AbstractButton.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Exception while removing reference: java.lang.InterruptedException
java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(Unknown Source)
	at java.lang.ref.ReferenceQueue.remove(Unknown Source)
	at sun.java2d.Disposer.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

danke
 
N

nillehammer

Gast
Ich glaube, dass Du einen Fehler in Deinem File-Path hast. Das hier:
Code:
file:/F:/Java/CAS-Projekt/./
sieht mir nach einem File-Objekt aus, dass ein Verzeichnis repräsentiert und nicht die XML-Datei. Check das mal.
[EDIT]
Japp, wenn ich in meinem Testcode einen Verzeichnispfad als File-Objekt übergebe, kommt genau diese Exception... seehr gemein :autsch:
[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

Scor3s

Mitglied
Hallo,
das Problem ist behoben, es handelte sich wirklich um den falschen Pfad. Jedoch habe ich nun ein anderes Problem.
Ich möchte die XML-Daten auslesen. Bei den ersten ist es auch kein Problem (name, torus, states, reihen, spalten)
-->
Java:
				for (int iterator = 0; iterator < doc.getElementsByTagName("name").getLength(); iterator++) {
					System.out.println("Name: " + doc.getElementsByTagName("name").item(iterator).getTextContent());
				};
				for (int iterator = 0; iterator < doc.getElementsByTagName("torus").getLength(); iterator++) {
					System.out.println("Torus: "+ doc.getElementsByTagName("torus").item(iterator).getTextContent());
				};
				for (int iterator = 0; iterator < doc.getElementsByTagName("states").getLength(); iterator++) {
					System.out.println("Anzahl States: " + doc.getElementsByTagName("states").item(iterator).getTextContent());
				};
				for (int iterator = 0; iterator < doc.getElementsByTagName("reihen").getLength(); iterator++) {
					System.out.println("Reihen: " + doc.getElementsByTagName("reihen").item(iterator).getTextContent());
				};
				for (int iterator = 0; iterator < doc.getElementsByTagName("spalten").getLength(); iterator++) {
					System.out.println("Spalten: " + doc.getElementsByTagName("spalten").item(iterator).getTextContent());
				};

Allerdings bekomme ich die Informationen für cell (collumn, row und state) nicht raus.
Jemand eine Idee? Ich möchte später mit den Werten arbeiten, sie werden hier nur zu Testzwecken ausgegeben.
Hier noch einmal die XML-Datei:
[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?><CAS_Automaton><population><name>internalautomata.KruemelmonsterAutomaton</name><torus>true</torus><states>8</states><reihen>1</reihen><spalten>1</spalten></population><cells><cell collumn="0" row="0" state="6"/></cells></CAS_Automaton>[/XML]

Gruß
 
N

nillehammer

Gast
Allerdings bekomme ich die Informationen für cell (collumn, row und state) nicht raus.
Jemand eine Idee?
Im org.w3c.dom wird ein XML-Dokument als Baum aufgefasst. Alles ist dabei ein relativ generischer Node. Die Attribute (collumn, row und state) sind auch Nodes und zwar Kinder des cell-Elements. Mach mal ein getChildNodes() auf dem Cell-Node und schau Dir die API-Doku zu Node an: Node (Java Platform SE 7 )
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Drucker voreingestelltes Papierformat auslesen Java Basics - Anfänger-Themen 0
A Buchstaben auslesen lassen vom Scanner Java Basics - Anfänger-Themen 18
G JComboBox ist editable und eingegebenen Text auslesen bei focusLost() Java Basics - Anfänger-Themen 1
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
T array auslesen Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Jsonfile auslesen Java Basics - Anfänger-Themen 8
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N JTable auslesen Java Basics - Anfänger-Themen 6
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
S Aus einer .bz2 Datei auslesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D XML von Seite auslesen Jsoup Java Basics - Anfänger-Themen 2
I Druckerauflösung auslesen - mittlerweile möglich? Java Basics - Anfänger-Themen 4
B WSDL auslesen? Java Basics - Anfänger-Themen 8
D Methoden Textdokument erstellen und auslesen. Java Basics - Anfänger-Themen 46
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
S Datein auslesen und verarbeiten Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
S CSV auslesen UTF-8 Problem Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
x-tshainge Interface Wie kann ich aus Textfeldern auslesen Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
T Website auslesen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
L CSV Auslesen Java Basics - Anfänger-Themen 5
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
D Mit Java HTML bzw Javascript auslesen Java Basics - Anfänger-Themen 1
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
F Zwischenwerte aus Browser auslesen Java Basics - Anfänger-Themen 19
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
G Servlet - externe HTML (URL) auslesen Java Basics - Anfänger-Themen 1
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
J Hashmap auslesen Java Basics - Anfänger-Themen 7
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
D String untereinander auslesen lassen Java Basics - Anfänger-Themen 2
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
J Informationen aus Webseiten auslesen Java Basics - Anfänger-Themen 1
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
dragonfight86 Erste Schritte OpenDocument auslesen Java Basics - Anfänger-Themen 13
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
W DNS Name auslesen + weitere Anfängerfrage Java Basics - Anfänger-Themen 4
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
Chrizzey45 Calc-Dokument in Java auslesen? Java Basics - Anfänger-Themen 2
B Datei auslesen und 2D-Array anlegen Java Basics - Anfänger-Themen 1
B Key auslesen/ausgeben innerhalb von foreach() Java Basics - Anfänger-Themen 5
M Eigenschaften einer Datei auslesen Java Basics - Anfänger-Themen 5
M Textarea auslesen und beschreiben Java Basics - Anfänger-Themen 8
J Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
Y Bildschirmauflösung auslesen Java Basics - Anfänger-Themen 4
S for schleife auslesen Java Basics - Anfänger-Themen 4
Voreck String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 9
Voreck Array aus txt datei auslesen Java Basics - Anfänger-Themen 2
N JFreeChart --> TimeSeries auslesen Java Basics - Anfänger-Themen 9
OlafHD Datei Auslesen Java Basics - Anfänger-Themen 6
M Metadaten OpenOffice mit Java auslesen Java Basics - Anfänger-Themen 9
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
J OpenOffice Dokumentenvariable mit Java auslesen Java Basics - Anfänger-Themen 1
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
L Text eingeben und im Textfeld auslesen lassen Java Basics - Anfänger-Themen 2
T Combobox Wert auslesen und damit weiterrechnen Java Basics - Anfänger-Themen 6
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben