Laden...

Wert eines XML-Knotens ändern und speichern

Erstellt von Luigi vor 15 Jahren Letzter Beitrag vor 15 Jahren 9.811 Views
L
Luigi Themenstarter:in
20 Beiträge seit 2007
vor 15 Jahren
Wert eines XML-Knotens ändern und speichern

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

Gelöschter Account
vor 15 Jahren

der XmlReader kann nur lesen. was du da vorhast geht am einfachsten mit dem XmDocument. einfach .Load ausführen und per x-path den richtigen knoten selektieren. dann den wert ändern und auf das document .Save ausführen. fertig.

M
1 Beiträge seit 2009
vor 15 Jahren

XmlNode node =  doc.DocumentElement.SelectSingleNode(fieldName);
node.InnerText = "neuer wert";
doc.save(..);

3.003 Beiträge seit 2006
vor 15 Jahren
  
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)

456 Beiträge seit 2007
vor 15 Jahren

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.