XML nur ein Element bearbeiten

forsterm

Erfahrenes Mitglied
Hallo,
ich habe folgende XML Datei.
Code:
<?xml version="1.0" encoding="utf-16"?>
<Programm>
  <Einstellungen>
    <Opacity>1</Opacity>
    <Tray>0</Tray>
    <Titel>Fenster1</Titel>
  </Einstellungen>
</Programm>
Ist es irgendwie möglich, dass nur die einzelnen Einstellung überschrieben werden?
Ich habe zwar schon etwas gefunden, wie man mit VB.NET XML Dateien erstellt,
jedoch wird dabei immer die ganze Datei überschrieben.

Hoffe hier kann mir jemand weiterhelfen.

mfg
forsterm
 

Norbert Eder

Erfahrenes Mitglied
C#:
string filename = @"C:\options.xml";
XmlDocument doc = new XmlDocument();
doc.Load(filename);

XmlNode xn = doc.SelectSingleNode("Programm/Einstellungen/Titel");
if (xn != null)
  xn.InnerText = "Fenster 2";

doc.Save(filename)


Dazu musst du den Namespace System.Xml einbinden. Dann sollte das so funktionieren, sofern ich jetzt keinen Tippfehler drinnen hab. Beispiel wurde von mir nicht getestet.
 

forsterm

Erfahrenes Mitglied
Hallo,
leider habe ich eine Fehlermeldung bekommen (siehe Bild).
Weiß jemand wo der Fehler liegen könnte?

mfg
forsterm
 

Anhänge

  • csharp_xml_fehler.jpg
    csharp_xml_fehler.jpg
    60,5 KB · Aufrufe: 136

forsterm

Erfahrenes Mitglied
Norbert Eder hat gesagt.:
Das Encoding des XMLs schon auf utf-8 gestellt?
Hallo,
habe das mal so versucht:
C#:
string filename = @"C:\options.xml";
XmlDocument doc = new XmlDocument();
Encoding.UTF8;
doc.Load(filename);
XmlNode xn = doc.SelectSingleNode("Programm/Einstellungen/Titel");
if (xn != null)
xn.InnerText = "Fenster 2";
doc.Save(filename);
Leider habe ich jedoch folgenden Fehler erhelten, mitdem ich aber nichts anfangen kann. :(
Code:
Nur assignment-, call-, increment-, decrement- und "new object"-Ausdrücke können als Anweisung verwendet werden.
mfg
forsterm
 

Christian Kusmanow

Erfahrenes Mitglied
forsterm hat gesagt.:
Leider habe ich jedoch folgenden Fehler erhelten, mitdem ich aber nichts anfangen kann. :(
Nur assignment-, call-, increment-, decrement- und "new object"-Ausdrücke können als Anweisung verwendet werden.
o.0 Zeile 3,
von Exceptions hast wohl noch nichts gehört?

[thread=228836]Problem mit Umlauten - Thread von Dir[/thread] (!)
[thread=231567]Hilfe bei SaveFileDialog - Thread[/thread]
 

Norbert Eder

Erfahrenes Mitglied
Du sollst das Encoding.UTF8 nicht in den Sourcecode schreiben, sondern lediglich die erste Zeile in deinem XML anpassen.
 

forsterm

Erfahrenes Mitglied
cosmochaosmaker hat gesagt.:
o.0 Zeile 3, von Exceptions hast wohl noch nichts gehört
Norbert Eder hat gesagt.:
Du sollst das Encoding.UTF8 nicht in den Sourcecode schreiben,
sondern lediglich die erste Zeile in deinem XML anpassen.
Hallo,
sorry, dass ich mich so blöd anstellen :-(, danke jetzt hat es funktioniert.
Nur noch eine (kleine) Frage. :rolleyes:
Wenn ich sagen wir folgende XML Datei erstellt habe:
Code:
<?xml version="1.0" encoding="utf-8"?>
<Programm>
  <Einstellungen>
    <Opacity>1</Opacity>
    <Tray>0</Tray>
    <Titel>Fenster1</Titel>
  </Einstellungen>
  <ListBox></ListBox>
</Programm>
wie kann ich dann zwischen die Elemente <ListBox></ListBox>
den Inhalt meiner ListBox schreiben? Es sollte ungefähr so aussehen:
Code:
<?xml version="1.0" encoding="utf-8"?>
<Programm>
  <Einstellungen>
    <Opacity>1</Opacity>
    <Tray>0</Tray>
    <Titel>Fenster1</Titel>
  </Einstellungen>
  <ListBox>
    <ListBoxEintrag>Eintrag1</ListBoxEintrag>
    <ListBoxEintrag>Eintrag2</ListBoxEintrag>
    <ListBoxEintrag>Eintrag3</ListBoxEintrag>
    <ListBoxEintrag>Eintrag4</ListBoxEintrag>
  </ListBox>
</Programm>

mfg
forsterm
 

Christian Kusmanow

Erfahrenes Mitglied
Also Du machst echt den Anschein als hättest Dich seit damals NICHT mit Exceptions auseinander gesetzt. --> :google:

forsterm hat gesagt.:
wie kann ich dann zwischen die Elemente <ListBox></ListBox>
den Inhalt meiner ListBox schreiben?
Ungefähr so: [post=969849]Beispiel - Post[/post]
 

forsterm

Erfahrenes Mitglied
Hallo,
ok ich habe es nun geschafft, dass der Inhalt einer ListBox in eine XML Datei gespeichert wird.
Das sieht wie folgend aus:
Code:
On Error GoTo err
Dim doc As XmlDocument = New XmlDocument()
Dim node As XmlNode
doc.Load(filename)
node = doc.SelectSingleNode("Programm/ListBox")
node.RemoveAll()
For i = 0 To ListBox1.Items.Count - 1
node.AppendChild(doc.CreateNode(XmlNodeType.Element, "ListBoxEintrag", ""))
node.ChildNodes(i).InnerText = ListBox1.Items.Item(i)
Next
doc.Save(filename)
Exit Sub
err:
MessageBox.Show(Err.Description, "Fehler beim Speichern der XML Datei")

Nun habe ich nur noch eine Frage. Wie kann ich nun jedem Element noch ein Attribut hinzufügen?

mfg
forsterm