# JAVA und DOM, probleme beim einfügen von elementen ??????



## reymond (26. Aug 2003)

hallo zusammen 

bin an einem einfachen beispiel dran. ich möchte einem xml file ganz einfach zwei elemente und text anhängen, was gemäss diversen beispielen einfach aussieht. 
ich meinte mein java code sollte dies auch tun, aber wenn ich die datei nach dem ausführen des codes öffne hat sich nichts getan. der code wir aber fehlerfrei asugeführt. warum schreibt er mir nichts in die datei und stimmt mein code....? 
herzlichen dank an alle.....super forum !!! 
ray 

mein beispiel xml fiel: 


```
Import 
Row 
ID "4" ID 
/Row 
*****neu eelemente********* 
Row 
ID "test" ID 
/Row 
*****neue elemente********* 
/Import
```
für dieses beispiel hab ich folgenden java code: 


```
import java.io.File; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.CharacterData; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.xml.sax.SAXParseException; 

public class ParserDom 
{ 
static Document document; 
String value = "test"; 

public ParserDom() 
{ 

} 

public void parse(String fileIn) 
{ 

File datei=new File("f:\\ray\\schule\\OOP\\konverter_inno\\"+ fileIn +".xml"); 
boolean laden=datei.canRead(); 
if (laden) 
{ 
try 
{ 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
document = builder.parse( new File("f:\\ray\\schule\\OOP\\konverter_inno\\"+ fileIn +".xml") ); 

if (fileIn.equals("shcsResultate")) 
{ 
Element root = document.getDocumentElement(); 
Node firstRow = root.getFirstChild(); 

// neue Elemente erstellen und ins Document einfügen 
Element newRow = document.createElement("Row"); 
Element id = document.createElement("ID"); 

CharacterData text = document.createTextNode(value); 
id.appendChild(text); 

newRow.appendChild(id); 

root.insertBefore(newRow, firstRow); 

} 

} 

catch (SAXParseException error) 
{ 
System.out.println("\n+++Parse Error+++"+ "\nZeile: " + error.getLineNumber() + "\nDatei: " + error.getSystemId()); 
System.out.println("\n" + error.getMessage() ); 

} 

catch (Throwable t) 
{ 
t.printStackTrace(); 
} 

} 
else 
{ 
System.out.println("datei existiert nicht!"); 

} 


} 

}
```


----------



## DTR (26. Aug 2003)

Hi,

DOM arbeitet im Hauptspeicher. D.H. dein XML wird in den Hauptspeicher geladen, dort verändert aber nicht auf die Platte zurück geschrieben. Zumindest konnte ich das bei deinem Code nicht finden.


----------



## ray (26. Aug 2003)

ahhh so, hab ich nicht gewusst. mhhh muss ich den code korrigieren damit er mir das file verändert...? 

habe dazu nichts gefunden :-(
herzlichen dank für hilfe, echt klasse...¨!!!

ray


----------



## DTR (26. Aug 2003)

Hier gibt es ein recht gutes Beispiel

http://www.torsten-horn.de/techdocs/java-xml.htm#Programmierbeispiel-DOM-Write


----------



## ray (26. Aug 2003)

hallo, dieses beispiel hab ich schon mal studiert und finde leider keinen zwingenden unterschied das es mit meinem code nicht funktionieren müsste. ich hole das file füge was hinzu und schliessen oder eine save kann ja nicht machen. er findet das file kann es parsen, nur einfügen geht nicht...? bin leider auch ein anfänger sodass ich vielleicht am falschen ort suche........weisst du weiter .....danke vielmal ray


----------



## DTR (26. Aug 2003)

In diesem Abschnitt wird zurück geschrieben, wie es darüber steht. Zwar in eine Neue Datei, aber du kannst ja auch die alte angeben. 


      // ---- Use a XSLT transformer for writing the new XML file ----
      Transformer transformer = TransformerFactory.newInstance().newTransformer();
      DOMSource        source = new DOMSource( document );
      FileOutputStream os     = new FileOutputStream( new File( argv[1] ) );
      StreamResult     result = new StreamResult( os );
      transformer.transform( source, result );

Davon sehe ich in deinem Code allerding nichts.


----------



## ray (26. Aug 2003)

mein gott, das dieses file überschrieben muss, hätte ich wohl nie heraus gefunden.
super herzlichen dank, es funktioniert!!!

fazit:
wenn ich etwas in einem xml file änder muss, muss ich das file immer überschreiben....

danke an alle, ein mega klasse forum!!!!! ray


----------

