Hey. Ich hab folgendes Problem.
Damits verständlich und übersichtlich bleibt, mach ich alles mal in Pseudo Code
Also folgendes Problem.
Wenn ich 1x meinen Button im GUI drücke, erstellt er die xml datei (seh ich im ordner), aber ich bekomm ein
Wenn ich dann einfach noch einmal drücke, kommt kein Error und es läuft alles wie es soll.
Wenn ich dann aber ein 3tes mal drücke bekomme ich ein
Das hab ich gegoogelt und herausgefunden, dass es wohl daran liegt, dass die xml nicht richtig utf-8 sei.
Die XML Datei erstelle ich über einen FileWriter so das <?xml version="1.0" encoding=\"UTF-8\"?> drin steht.
Dann hab ichs mal mit weglassen des encodings probiert
und mein 3ter Versuch war die XML Datei über den wc3 dom parser zu erzeugen.
Jedes mal das Gleiche
Hat wer ne Idee?
Grüße
EDIT mal der ganze Code, vllt hilft es
EDIT 2: Ich dreh echt am Zeiger, habs jetzt mal mit nem anderen Stream und uft-8 probiert, genau das gleiche Problem
Damits verständlich und übersichtlich bleibt, mach ich alles mal in Pseudo Code
Java:
Klasse1{
Enter gedrückt -> schreibXML();
}
Java:
schreibXML{
schreibXML(){
checkObDateiVorhanden()
}
schreibXML(File file){
schreiben();
}
checkObDateiVorhanden(){
if(vorhanden)
schreiben();
else
erstelleXML();
}
schreiben(){
setzt paar neue elemente
}
erstelleXML(){
blalbla erstellt datei
schreibXML(file); //ruft überladenen konstruktor mit der erstellten datei auf;
}
}
Also folgendes Problem.
Wenn ich 1x meinen Button im GUI drücke, erstellt er die xml datei (seh ich im ordner), aber ich bekomm ein
Java:
Exception in thread "AWT-EventQueue-0" org.jdom.IllegalDataException: The data "null" is not legal for a JDOM attribute: A null is not a legal XML value.
Wenn ich dann einfach noch einmal drücke, kommt kein Error und es läuft alles wie es soll.
Wenn ich dann aber ein 3tes mal drücke bekomme ich ein
Java:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ungültiges Byte 2 von 2-Byte-UTF-8-Sequenz.
Das hab ich gegoogelt und herausgefunden, dass es wohl daran liegt, dass die xml nicht richtig utf-8 sei.
Die XML Datei erstelle ich über einen FileWriter so das <?xml version="1.0" encoding=\"UTF-8\"?> drin steht.
Dann hab ichs mal mit weglassen des encodings probiert
und mein 3ter Versuch war die XML Datei über den wc3 dom parser zu erzeugen.
Jedes mal das Gleiche
Hat wer ne Idee?
Grüße
EDIT mal der ganze Code, vllt hilft es
Java:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class DatabaseWriter {
HashMap<String, String> artikelInfos = new HashMap<String, String>();
public DatabaseWriter(HashMap<String, String> artikelInfos){
this.artikelInfos = artikelInfos;
File file = new File("db.xml");
checkForExist(file);
}
public DatabaseWriter(File file){
writeIntoDB(file);
}
private void checkForExist(File file){
if(!file.exists()){
createNewDB(file);
}else{
writeIntoDB(file);
}
}
private void writeIntoDB(File file){
try {
System.out.println("0");
Document doc = new SAXBuilder().build(file.toString());
System.out.println("01");
Element db = doc.getRootElement();
System.out.println("1");
//int actualSize = Integer.valueOf(db.getChild("size").getAttributeValue("value")) + 1; // holt sich aktuelle anzahl der artikel und erhöht + 1
//db.getChild("size").setAttribute("value",String.valueOf(actualSize)); // erhöt die anzahl der artikel
System.out.println("2");
Element artikel = new Element("artikel").setAttribute(new Attribute("id","af"));
db.addContent(artikel);
System.out.println("3");
artikel.addContent(new Element("titel").setAttribute(new Attribute("value",artikelInfos.get("titel"))));
artikel.addContent(new Element("autor").setAttribute(new Attribute("value",artikelInfos.get("autor"))));
artikel.addContent(new Element("format").setAttribute(new Attribute("value",artikelInfos.get("format"))));
artikel.addContent(new Element("preis").setAttribute(new Attribute("value",artikelInfos.get("preis"))));;
artikel.addContent(new Element("date").setAttribute(new Attribute("value",artikelInfos.get("date"))));
System.out.println("4");
// ---------------------------------------------------------
XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, new FileWriter("db.xml"));
} catch (JDOMException | IOException e) {
e.printStackTrace();
}
}
private void createNewDB(File file){
try {
file.createNewFile();
iniDB(file);
} catch (IOException e) {
e.printStackTrace();
}
}
private void iniDB(File file){
File temp = file;
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
bw.write("<?xml version=\"1.0\" encoding="UTF-8"?>\n");
bw.write("<datenbank>\n<size value=\"0\" /></datenbank>");
bw.close();
new DatabaseWriter(temp);
} catch (IOException e) {
e.printStackTrace();
}
}
}
/* HashMap zum testen
artikelInfos.put("titel", "1");
artikelInfos.put("autor", "2");
artikelInfos.put("format", "3");
artikelInfos.put("preis", "4");
artikelInfos.put("date", "5");
*/
EDIT 2: Ich dreh echt am Zeiger, habs jetzt mal mit nem anderen Stream und uft-8 probiert, genau das gleiche Problem
Java:
private void iniDB(File file){
File temp = file;
try {
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><datenbank><size value=\"0\" /></datenbank>");
out.close();
new DatabaseWriter(temp);
} catch (IOException e) {
e.printStackTrace();
}
}
Zuletzt bearbeitet: