Hallo Zusammen,
ich habe folgendes Problem:
Ich möchte nur in einer bestehenden XML-File den Wert eines Elementes ändern.
Z.B. würde ich den Wert des Elementes <my:Projekt-Nr.> ändern.
<my:Suchbegriff>11</my:Suchbegriff>
<my:Projekt-Nr.>TUG-JWE-01</my:Projekt-Nr.>
<my:Klassezeichen></my:Klassezeichen>
Folgenden Code habe ich mir schon zusammen gebastelt:
public void setValue(string fieldname, string value)
{
StreamReader localstrread = new StreamReader(filename);
XmlReader localreader = new XmlTextReader(localstrread);
while(localreader.Read())
{
if (localreader.NodeType == XmlNodeType.Element && localreader.Name == fieldname)
{
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlNode node = doc.ReadNode(localreader);
node.InnerText = value;
doc.Save(@"C:\Temp\test.xml");
break;
}
}
}
Die Methode rufe ich wie folgt auf:
XMLController xml = new XMLController();
xml.setFilename(@"C:\Temp\test.xml");
xmlsetValue("my:Projekt-Nr.", "TEST");
Das Feld hole ich mir über einen XMLReader (Gibt es eine andere Möglichkeit direkt ein Element zu finden nur über dessen Bezeichnung?).
Der XMLNode stimmt dann auch.
Ich will jetzt nur den Wert des TextNodes ändern.
Das ganze habe ich über node.InnerText versucht. Der Knoten ändert sich auch (angeschaut im Debug-Mode) leider wird das ganze aber nicht in der File geändert.
Hat hier jemand eine Idee?
Gruß
Luigi
XmlNode node = doc.DocumentElement.SelectSingleNode(fieldName);
node.InnerText = "neuer wert";
doc.save(..);
node.InnerText = "neuer wert";
*grummel* InnerText ist NICHT geeignet. Prinzipiell Finger weg davon.
node.FirstChild.Value = "neuer Wert";
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Ich würde auch mal anraten den Sprung auf 3.5 nicht zu scheuen, Stichwörter XElement, XAttribute und XDocument
Ein Beispiel zum ändern eines vorandenen Elements wäre:
myMainNodeXElement.Descendants("Projekt-Nr.").First().Value = "Bla";
Der Vorteil ist halt hier auch, dass mittels LINQ to XML Abfragen durchgeführt werden können.