Hallo,
ich hab folgendes Problem. Ich möchte eine XML-Konfigurationsdatei erzeugen welche auch leere Einträge enthalten soll. Beim erstellen der Datei werden aber die einträge mit leerem innertext falsch reingeschrieben und das schreiben nach dem zweiten EIntrag abgebrochen. Alle weiteren Einträge, welche in die XML geschrieben werden sollen werden dem letzten Knoten zugeordnet anstatt das ein neuer erzeugt wird.
Diese XML wird erzeugt...
XML-Daten
1: 2: 3: 4: 5: 6:
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <settings> <SaperionUsername>administrator</SaperionUsername> <SaperionPassword> </SaperionPassword> </settings> |
dabei benutze ich die folgenden zwei Methoden
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| public void Write(string key, string newValue) { XmlNode node = FindNode(key, true); node.InnerText = newValue; xmlDoc.Save(xmlFile); }
private XmlNode FindNode(string key, bool createNew) { if (key != null && key != "") if (key[0] == '/') key = key.Remove(0, 1);
if (key != null && key != "") if (key[key.Length - 1] == '/') key = key.Remove(key.Length - 1, 1);
char[] splitChars = { '/' }; string[] parts = key.Split(splitChars);
XmlNode node = root; XmlNode child = null;
foreach (string entry in parts) { child = node.FirstChild; do { if (child == null || child.Name == entry) break;
child = child.NextSibling; } while (child == null);
if (child == null) { child = xmlDoc.CreateElement(entry); node.AppendChild(child); } node = child; } return node; } |
das ganze wird aufgerufen über diesen Aufruf: Wenn dann, wie beim zweiten aufruf, der übergebene Inhalt ein leerer String ist, dann stimmt irgendwas in der XML ncht mehr.
C#-Quelltext
1: 2: 3:
| myConfig.Write("SaperionUsername", "administrator"); myConfig.Write("SaperionPassword", ""); ... |
soviel erstmal dazu. Mein Problem ist nun, dass ich gerne die folgede XML hätte:
XML-Daten
1: 2: 3: 4: 5: 6:
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <settings> <SaperionUsername>administrator</SaperionUsername> <SaperionPassword></SaperionPassword> ... </settings> |
Kann mir jemand dazu helfen?
Moderiert von
Christian S.: Quote- durch XML- und C#-Tags ersetzt