XML-Schnittstelle JDom Fehler

Maddili

Mitglied
Hi, ich bekomme eine Exception, wenn ich einen Wert (per JDom) in eine XML-Datei schreiben will. Das auslesen funktioniert!

Hier der Fehler:

Code:
java.net.MalformedURLException: no protocol: settings.xml
	at java.net.URL.<init>(URL.java:567)
	at java.net.URL.<init>(URL.java:464)
	at java.net.URL.<init>(URL.java:413)
	at gnu.xml.aelfred2.XmlParser.pushURL(XmlParser.java:3414)
	at gnu.xml.aelfred2.XmlParser.doParse(XmlParser.java:159)
	at gnu.xml.aelfred2.SAXDriver.parse(SAXDriver.java:320)
	at gnu.xml.aelfred2.XmlReader.parse(XmlReader.java:294)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:453)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:891)
	at test.XMLread.setSettings(XMLread.java:100)
	at test.Einstellungen.actionPerformed(Einstellungen.java:170)



Die Methode um den Wert zu schreiben:
Die settings.xml liegt direkt im Home Verzeichnis des Programms.
Java:
public static void setSettings(String DBColumn, String Value) {
		XMLread xml = new XMLread();
		System.out.println("berechnung mm xmlread" + Value);
			SAXBuilder builder = new SAXBuilder();
			try { 
org.jdom.Document doc = builder.build("settings.xml"); // HIER PASSIERT DER FEHLER!
				org.jdom.Element data = doc.getRootElement();
				org.jdom.Element settings = data.getChild("settings");
				org.jdom.Element txtBerechnungMM = settings.getChild("BerechnungMM");
				txtBerechnungMM.setText(""+Value);
				XMLOutputter outp = new XMLOutputter();
				outp.setFormat(Format.getPrettyFormat());
				outp.output(doc, new FileOutputStream(new File("settings.xml")));

			}  catch (IOException e) {
				e.printStackTrace();
			} catch (JDOMException e) {
				e.printStackTrace();
			}
	}

Und hier noch der Aufbau der xml Datei:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<data>
  <settings>
    <DBServer>XYZ123</DBServer>
    <Database>myDB</Database>
    <DBPath>C:\Documents and Settings\test123\My Documents\</DBPath>
    <pdfout>C:\WINNT\Temp\</pdfout>
    <languageindex>1</languageindex>
    <zaehler>0</zaehler>
    <sortierer>PID</sortierer>
   <BerechnungMM>9750</BerechnungMM> // <- UM DIESEN WERT GEHT ES
  </settings>
  <languages>
    <german />
    <english />
  </languages>
</data>

Kann mir einer sagen, wo der Fehler liegt? Laut Fehlerkonsole liegt er in der Zeile, welchen ich im Java-Code kommentiert habe.


schönen Tag,
Martin
 
Der Fehler is folgender:
Du definierst in deiner XML-Datei kein Schema, nach dem diese Datei funktioniert.
Es müsste 2 Möglichkeiten gebe, dies zu lösen:
1. Du erstellst dir dein eigenes XML-Schema und gibst dies in deiner XML-Datei an. Hier als Beispiel die Angabe des Schemas von HTML-Dokumenten:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
in die 2. zeile einfügen.
2. Du nimmst statt dem Standardkonsturktor in Zeile 4 folgenden Konstruktor:
Code:
SAXBuilder builder = new SAXBuilder(false);
Damit sagst du dem Parser, dass er das Dokument nich auf Gültigkeit laut einem Schema testen soll. Dies ist die einfachere Methode, jedoch könnte das XML-Dokument womöglich Felher enthalten.
 
Code:
<?xml version="1.0" encoding="UTF-8"?>

Passt doch, oder nicht?
Ich habe mit dieser Konstruktion auch schon mal gearbeitet.. da hat es wunderbar funktioniert. Denke nicht, dass das der Fehler ist.

Und meine XML-Datei hat keine Fehler... .ist im Moment nur so ne Testsache. Steht nicht viel mehr drin, wie in dem Code, den ich gepostet habe.

Aber danke für die Antwort.

Weitere Ideen?

mfg
Maddin
 
Deine erste Zeile ist auch nicht falsch. Die passt.
Probier mal den folgenden Konstruktor statt deinem aus:
Code:
new SAXBuilder(false);
Das müsste eigentlich funktionieren.
 
Howdie.

@doe300:
Ein Konstrukt wie es Maddili verwendet setze ich seit Jahren ein, es kam nie ein derartiger Fehler auf - auch bei aktivierter Validierung. Aber ich lasse mich natürlich gern eines besseren belehren :)

@Maddili
Da es sich ja um eine MalformedURLException handelt, würd ich mal mit der Pfad-Angabe weiterprobieren. Vielleicht stimmen ja irgendwelche anderen Settings nicht (Homeverzeichnis, etc.), daher würde ich statt dem relativen Pfad mal testhalber den Absoluten Pfad zur settings.xml angeben.

Gruß
miffi
 
Zurück