# Mit XPATH finden und dann änder



## thomet (25. Sep 2008)

Hy,
ich suche bestimmte stellen in einer XML datei mit XPATH. Er findet diese auch wunderbar.
Nun möchte ich an der stelle zb den Attribut "class" ändern und wieder in der XML Datei speichern.

Wie kann ich das mit dem ändern und Speichern realisieren????

hier ma mein aktueller Quellcode:

```
Document doc = null;
	String file = "daten.xml";

	try {
		doc = new SAXBuilder().build( file );	
	} catch (JDOMException e) {
		System.out.println("Fehler im JDOM:");
		e.printStackTrace();
	} catch (IOException e) {
		System.out.println("Fehler beim lesen der Datei:");
		e.printStackTrace();
	}

	try {
		xpath = XPath.newInstance( "/*[local-name()='plugin']/*[local-name()='extension']/*[local-name()='application']/*[@class!='']" );
		allApplication =  xpath.selectNodes( doc );
	} catch (JDOMException e) {
		System.out.println("Fehler im JDOM:");
		e.printStackTrace();
	}
		
	for ( Object objApp : allApplication) {
		Element eApp = (Element) objApp;
		String sApp = eApp.getAttribute("class").getValue();
		eApp.getAttribute("class").setValue("neuerInhalt");
	}	

	// Jetzt soll meine veränderung gespeichert werden
```

Vieleicht könnt ihr mir ja weiter helfen. Ich weiß nicht wirklich wie ich das jetzt speichern kann.

mfg thomet


EDIT:


ODER

falls jemand nen ganz andern Vorschlag hat, hier das was ich will:

Ich möchte, aus einer XML-Datei, alle Tags mit den Attribut class den Inhalt des Attributes auf einen andern von mit bestimmten Wert setzen.


----------



## 0x7F800000 (25. Sep 2008)

Die Ausgabe bewerkstelligst du mit dem Outputter aus org.jdom.output.*

```
//stream erstellen: kannst es zB zum Browser, oder auch in eine Datei schicken
OutputStream stream=new FileOutputStream(file); 
 //das document "doc" schön formatiert in der "stream" schicken
(new XMLOutputter(Format.getPrettyFormat())).output(doc,stream); 
stream.close(); //weiss nicht, ob das wirklich nötig ist?
```

Was ich allerdings ein wenig angemessener finden würde: mit diesen ganzen schleifen herumzuhantieren, könntest du auch einen kleinen XSLT-code schreiben, der genau diese ersetzung im XML vornimmt. Wenn du den code hast, musst du nur noch den Transformer aus javax.xml.transform.* mit diesem code auf das document loslassen, und schon ist alles ersetzt. zu XSLT findest du einen kurzen und selbsterklärenden beispiel in der Insel, bei w3c schools gibts auch eine schöne einführung (20 minuten blättern, dann kann man's schon einsetzen. XPath ist da imho eh das schwierigere).


----------



## thomet (26. Sep 2008)

ok danke das funktioniert super... mit dem XSLT schau ich mir auch mal an


----------

