eigentlich einfach nur XML schreiben

Status
Nicht offen für weitere Antworten.

bbone

Mitglied
Guten Tag, also folgendes habe ich schon

Java:
		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
Java:
						tmpSubnode.setNodeValue(String.valueOf(Nr));
also auch
Java:
tmpSubnode.setTextContent(String.valueOf(Nr));
versucht. Tut aber irgendwie beider überhaupt nichts. Muss ich noch irgendwo flush() oder sowas sagen ?

Gruß
 
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
 
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
 
> 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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben