# eigentlich einfach nur XML schreiben



## bbone (4. Nov 2009)

Guten Tag, also folgendes habe ich schon


```
docBuildFac = DocumentBuilderFactory.newInstance();
		docBuild = docBuildFac.newDocumentBuilder();
		fileOutput = new File("config.xml");
		vecConfigSets = new Vector<ConfigSetContainer>();
		docXML = docBuild.parse(fileOutput);

		NodeList nl = docXML.getFirstChild().getChildNodes();
		int anzNodes = nl.getLength();
		for (int i = 0; i < anzNodes; i++)
		{
			// Unterhalb von data Knotennamen holen
			Node nodeActual = nl.item(i);
			String strActualNodeName = nodeActual.getNodeName();

			if (strActualNodeName.endsWith("mscons_config"))
			{
				// Jetzt amm Knoten gefunden
				NodeList subnl = nodeActual.getChildNodes();
				int anzSubNodes = subnl.getLength();
				ConfigSetContainer configSetContainerTmp = new ConfigSetContainer();
				for (int k = 0; k < anzSubNodes; k++)
				{
					// Unterhalb von data Knotennamen holen
					Node tmpSubnode = subnl.item(k);
					String subNodename = tmpSubnode.getNodeName();
					if (subNodename.endsWith("Name"))
					{
                                         //An dieser Stelle neuen Wert setzen !!!
```

Funktioniert soweit lesend auch alle. Jetzt würde ich gerne den Wert an dem Kommentar verändern ohne das ich alles nochmal neu durchsuchen muss.
Ich habe sowohl 
	
	
	
	





```
tmpSubnode.setNodeValue(String.valueOf(Nr));
```
also auch 

```
tmpSubnode.setTextContent(String.valueOf(Nr));
```
versucht. Tut aber irgendwie beider überhaupt nichts. Muss ich noch irgendwo flush() oder sowas sagen ?

Gruß


----------



## SlaterB (4. Nov 2009)

was soll denn passieren?
soll sich die Datei auf der Festplatte ändern?
ein Reader hat passenderweise keine flush()-Methode, da musst du schon irgendeine Art Writer/ OuputStream ins Spiel bringen

das ist von API zu API unterschiedlich,
nachdem was ich kurz bei google gesehen habe musst du wohl etwas in der Art verwenden, was hier 
Writing Out a DOM as an XML File
unter 'Creating a Transformer' steht, oder bessere Tutorials finden 

statt
> StreamResult result = new StreamResult(System.out);
kann man sicher auch einen FileOutputStream oder so angeben


----------



## bbone (4. Nov 2009)

Kann ich mit meiner vorhandenen Funktion nichts machen? Muss ich da zwangsweise ne neue Funktion machen. Zum Beispiel: Wird beschrieben wie ein neuer Node erstellt wird und nicht wie ein vorhandener manipuliert werden kann


----------



## SlaterB (4. Nov 2009)

> Zum Beispiel: Wird beschrieben wie ein neuer Node erstellt wird und nicht wie ein vorhandener manipuliert werden kann 

das ist das schöne am Programmieren, es zerfällt in Teilaufgaben,
ob ein Node (bzw. ein ganzes Document) neu erstellt wurde oder von irgendwoher geladen wurde ist ganz egal,
die weitere Verarbeitung (z.B. Speichern) nimmt ein beliebiges Document und macht dann was damit

vergleiche im einfacheren Maßstab:
String x = ...;
ob diese ... nun einfach "test" ist oder ladeKompliziertenStringAusDatei(); ist danach völlig egal,
der String ist dann da und kann danach weiterverarbeitet werden, 
er trägt keine Meta-Informationen in sich, z.B. wo er herkommt


sicherlich ist es allgemein denkbar, dass, nachdem das Document explizit geladen wurde,
eine einfache Methode writeBackToFile() irgendwo zur Verfügung steht, nicht unbedingt im Document selber, sondern irgendwo anders,
meiner Kenntnis nach ist das aber nicht der Fall, was also auch 'Kann ich mit meiner vorhandenen Funktion nichts machen?' beantwortet,
Experte bin ich da aber nicht


----------

