# XML Tag Inhalt Ändern



## Jeykas (31. Mrz 2011)

Hallo,

meine Frage ist, wie ich in einem XML Dokument den Text zwischen Tags ändern kann ?

mein Code :


```
NodeList ndl2 = document.getElementsByTagName("Info");
```

in diesem Tag "Info" ist ein Item <Headline> blablabla</Headline>
und ich möchte das "blablabla" durch "hallo" ersetzen...


```
Node nodeheadline = ndl2.item(0);
Element headline = nodeheadline.Element;
headline.setText("Hallo");
```

aber das funktioniert in keinster Weise... 
Ich hoffe ihr könnt mir helfen...


----------



## SlaterB (31. Mrz 2011)

in jedem Fall musst du am Ende das Document wieder in einer Datei speichern wenn du eine geänderte Datei brauchst,
in der Hinsicht Code vorhanden?

> headline = nodeheadline.Element;
klingt allerdings nicht nach Java


----------



## Jeykas (31. Mrz 2011)

```
File quelle = new File("test.xml");
File file = new File("file.xml");
```

in file.xml steht dasselbe wie in test.xml im Moment, aber nachdem ich es geändert habe soll eben was anderes drin stehen =)

Ja das sah mal so aus :

```
Node nodeheadline = ndl2.item(0);
Element headline = nodeheadline.getChildNodes().item(1).getChildNodes().item(2);
headline.setText("Hallo");
```

Ich probiere gerade rum....


----------



## Jeykas (1. Apr 2011)

OK, ich habe jetzt mal das :


```
Node nodeheadline = ndl2.item(0);
		nodeheadline.getChildNodes().item(1).getChildNodes().item(1).setTextContent("Hallo");
```

Wie setzte ich jetzt diesen String bei dem File "file.xml" an diese Stelle, weil so setzt es den String bei dem File ein wo es die Infos auch holt...


----------



## SlaterB (1. Apr 2011)

hole dir das Ding darüber, nodeheadline.getChildNodes().item(1).getChildNodes().item(1)
und ändere dort den Text, selbst wenn man nichts über diese Dinge weiß, was auf mich auch zum Teil zutrifft, 
wäre setTextContent() schon relativ leicht zu raten und das gibt es anscheinend in der API

danach wie gesagt noch speichern, das bitte nun wirklich erstmal im Internet/ in Tutorials nachschlagen,
'wie speichert man ein Document' ist kein Problem sondern eine Wissensgrundlage


----------



## Noctarius (1. Apr 2011)

Außerdem zeig mal wie du die Datei wieder speicherst.


----------



## Jeykas (1. Apr 2011)

Ich weiß das das kein Problem sondern eine Wissensfrage ist, zudem denke ich, das du mich nicht genau verstanden hast.
Ich schrieb, ich möchte den Inhalt in einem bestehenden Document ändern, warum sollte ich da nochmal eine abspeichern ??


```
Document doc2 = builder.parse("file.xml");
		NodeList ndl3 = doc2.getElementsByTagName("test");
	
		Node nodeheadline = ndl2.item(0);
		String hallo =nodeheadline.getChildNodes().item(1).getChildNodes().item(1).getTextContent();
	
		Node newnode = ndl3.item(0);
		newnode.getChildNodes().item(1).getChildNodes().item(1).setTextContent(hallo);
```
das ist mein code bist jetzt, aber der funktioniert leider nicht ganz, weil ich die Fehlermeldung
"Premature end of file" bekomme jetzt....


----------



## Jeykas (1. Apr 2011)

O, so bekomme ich zwar keine Fehler mehr, aber der Text in "file.xml" wird trotzdem nicht geändert ?


```
Document doc2 = builder.parse("file.xml");
NodeList ndl3 = doc2.getElementsByTagName("test");
	
Node newnode = ndl3.item(0);
newnode.getChildNodes().item(1).getChildNodes().item(1).setTextContent("Hallo-Headline");
```


----------



## Noctarius (1. Apr 2011)

Vermutlich weil man Änderungen speichern sollte? oO Dein Worddokument wird doch auch ohne Speichern nicht abgeändert?


----------



## Jeykas (1. Apr 2011)

Wenn ich die Änderung aber speichere, dann verunstaltet es meinen XML Code total ;(


```
Document doc2 = builder.parse("file.xml");
NodeList ndl3 = doc2.getElementsByTagName("test");
	
Node newnode = ndl3.item(0);
newnode.getChildNodes().item(1).getChildNodes().item(1).setTextContent("Hallo");
		
Writer out = new StringWriter();
OutputFormat of = new OutputFormat(doc2);
XMLSerializer serializer = new XMLSerializer(out, of);
serializer.setOutputCharStream(new java.io.FileWriter("file.xml"));
serializer.serialize(doc2);
```

so habe ich es gemacht, das funktioniert auch, die Änderungen werden übernommen, aber in meinem XML steht dann alles in einer Zeile...


----------



## Noctarius (1. Apr 2011)

Google: Java Xml Prettyprint


----------



## Jeykas (4. Apr 2011)

Ich habe den Serializer gegen den Transformer umgetauscht, und es funktioniert jetzt, hier der Code:

```
Node newnode = ndl3.item(0);
		newnode.getChildNodes().item(1).getChildNodes().item(1).setTextContent("Hallo");
		
		TransformerFactory.newInstance().newTransformer().transform(new DOMSource(doc2),
				new StreamResult(new FileOutputStream("file.xml")));
```


----------

