C# XML-(Text)Node bearbeiten

.Linux.

Cadet 3rd Year
Registriert
Mai 2010
Beiträge
36
Hallo zusammen,

ich stehe gerade vor dem Problem eine XML-Datei zu bearbeiten und weiß nicht weiter.

<Config>
<Allgemein>
<BetrArtGer>ready</BetrArtGer>
</Allgemein>
</Config>

Den Text von "BetrArtGer" kann ich auslesen mit:
string test = xmlfile.SelectSingleNode("/" + main + "/" + group + "/" + element).InnerText
(xmlfile ist ein XMLDocument)

Was ich jedoch nicht schaffe ist den Node zu leeren, d.h. am ende soll dann

<Config>
<Allgemein>
<BetrArtGer /> <== so soll es aussehen
</Allgemein>
</Config>

stehen.

Wenn ich aber xmlfile.SelectSingleNode("/" + main + "/" + group + "/" + element).InnerText = string.Empty; mache kommt folgendes herraus:

<Config>
<Allgemein>
<BetrArtGer> <== das sollte nicht so sein
</BetrArtGer> <== das sollte nicht so sein
</Allgemein>
</Config>

Weiß jemand wie das funktioniert?
Danke schon mal für euere Hilfe :-)
 
Was genau stört dich denn daran?
Es ist beides absolut korrekt. Das "Expanded-Element" kriegst du dadurch, dass du den Inhalt auf string.Empty setzt.
So auf Anhieb glaube ich, ist es auch gar nicht möglich die Kurzform zu erzwingen - dürfte historische Gründe haben, als sich alle über Microsoft aufgeregt haben, dass sie ein leeres Element automatisch in der Kurzform notiert haben ^^

Wie auch immer. Über einen Umweg kriegst du es trotzdem hin

Code:
XDocument doc = XDocument.Parse( "<foo><bar>text</bar></foo>" );
var bar = doc.Descendants( "bar" ).First();
bar.Value = string.Empty;

Führt zu
Code:
<foo>
  <bar>
  </bar>
</foo>

Aber:

Code:
XDocument doc = XDocument.Parse( "<foo><bar>text</bar></foo>" );
var bar = doc.Descendants( "bar" ).First();
bar.Remove();
doc.Root.Add( new XElement( "bar" ) );

Wird ausgegeben als
Code:
<foo>
  <bar />
</foo>
 
Zurück
Oben