ich habe ein Programm geschrieben welches Xml-Datei ausliest mit StandardDomParser von Sun.
Wenn ich einen Neuen Knoten erstelle und ihn später auslesen möchte ist er zwar da hat aber keine Attribute und unterknoten. Komischerweise.. wenn ich mit XmlSerializer den Baum speichere ist alles vollständig..
neuer Knoten:
speichern:
auslesen:
setze ich die Attribute nicht richtig?? oder wo könnte der Fehler liegen?
XML-Datei:
Wenn ich einen Neuen Knoten erstelle und ihn später auslesen möchte ist er zwar da hat aber keine Attribute und unterknoten. Komischerweise.. wenn ich mit XmlSerializer den Baum speichere ist alles vollständig..
neuer Knoten:
Code:
public void newNode(MyToDo todo, String typ){
try{
Element root = doc.getDocumentElement();
Element datensatz = doc.createElement("Datensatz");
root.appendChild(datensatz);
Element status = doc.createElement("Status");
status.setAttribute("art", typ);
status.setAttribute("prio", todo.getPrio().toString());
datensatz.appendChild(status);
if(typ.equals("termin")){
Element datum = doc.createElement("Datum");
Text tdatum = doc.createTextNode(todo.getDatum().toString());
datum.appendChild(tdatum);
datensatz.appendChild(datum);
Element uhrzeit = doc.createElement("Uhrzeit");
Text tuhrzeit = doc.createTextNode(todo.getZeit().toString());
uhrzeit.appendChild(tuhrzeit);
datensatz.appendChild(uhrzeit);
}
Element info = doc.createElement("Info");
Text tinfo = doc.createTextNode(todo.getInfo().toString());
info.appendChild(tinfo);
datensatz.appendChild(info);
}catch(Exception e){
e.printStackTrace();
}
}
Code:
public void save(){
try{
FileWriter fw = new FileWriter("termin.xml",false);
OutputFormat of = new OutputFormat(doc);
of.setIndenting(true);
of.setEncoding("iso-8859-1");
XMLSerializer xmlS = new XMLSerializer(fw,of);
xmlS.serialize(doc);
fw.close();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
Code:
public TreeSet<Integer> termine_in_Kalender(GregorianCalendar gc){
nl = doc.getElementsByTagName("Datensatz");
// Vergleichsdatum erschaffen
int month = gc.get(Calendar.MONTH)+1;
String myMonth, myYear;
if(month<10){
myMonth="0"+month;
}else myMonth=""+month;
myYear=""+gc.get(Calendar.YEAR);
String date="";
String[]array;
TreeSet<Integer> vec= new TreeSet<Integer>();
// hier wird jeder Datensatz ausgelesen ob er mit DatumsString übereinstimmt
for (int i=0;i<nl.getLength();i++){
// wenn ich hier nicht die Abfrage hätte ob Attribute da sind
// (wobei ich weiss das da welche sein müssten, denn wenn ich das Programm starte wird diese
// Funktion ja auch aufgerufen) würde er mit nullPointer Exception reagieren, wenn er den neuen
// Knoten erreicht
if(nl.item(i).getChildNodes().item(1).hasAttributes()){
NamedNodeMap nnm=nl.item(i).getChildNodes().item(1).getAttributes();
if(nnm.item(0).getNodeValue().equals("termin")){
date=nl.item(i).getChildNodes().item(3).getChildNodes().item(0).getNodeValue().toString();
array=date.split("\\.");
if((myMonth.equals(array[1]))&(myYear.equals(array[2]))){
vec.add(new Integer(Integer.parseInt(array[0])));
}
}
}
}
return vec;
}
setze ich die Attribute nicht richtig?? oder wo könnte der Fehler liegen?
XML-Datei:
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE Termin [<!ELEMENT Termin (Datensatz)*>
<!ELEMENT Datensatz (Status,Datum?,Uhrzeit?,Info)>
<!ELEMENT Status (#PCDATA)>
<!ATTLIST Status art (termin|aufgabe) #REQUIRED>
<!ATTLIST Status pr (1|2|3) #REQUIRED>
<!ELEMENT Datum (#PCDATA)>
<!ELEMENT Uhrzeit (#PCDATA)>
<!ELEMENT Info (#PCDATA)>
]>
<Termin>
<Datensatz>
<Status art="termin" prio="1"/>
<Datum>24.12.2006</Datum>
<Uhrzeit>12:36</Uhrzeit>
<Info>Weihnachten</Info>
</Datensatz>
<Datensatz>
<Status art="aufgabe" prio="1"/>
<Info>Mach neu</Info>
</Datensatz>
<Datensatz>
<Status art="aufgabe" prio="3"/>
<Info>Mach was ganz neues</Info>
</Datensatz>
<Datensatz>
<Status art="termin" prio="1"/>
<Datum>28.10.2006</Datum>
<Uhrzeit>14:18</Uhrzeit>
<Info>irgendwas tun</Info>
</Datensatz>
<Datensatz>
<Status art="termin" prio="3"/>
<Datum>28.11.2006</Datum>
<Uhrzeit>15:27</Uhrzeit>
<Info>test</Info>
</Datensatz>
</Termin>