.
Anmeldung | Registrieren | Hilfe |
Suchen
Home Foren News Member Offers Termine Developer Blogs Knowledge Base

Navigation

Navigationslinks überspringen.
Knowledge Base reduzierenKnowledge Base
Tutorials reduzierenTutorials
Webentwicklung
Cliententwicklung
Datenbankentwicklung
IT Professional
Sharepoint
Sprachspezifisch reduzierenSprachspezifisch
C#
Visual Basic
C++
XAML
SQL
JavaScript
Erfahrungsberichte reduzierenErfahrungsberichte
Entwicklersoftware
Bücher
FAQ Grundlagen

Verknüpfungen

  • Knowledge Base durchsuchen
  • Hilfe zur Knowledge Base
  • RSS Feed
  • Twitter

LINQ to XML Teil 3 – Manipulieren einer XML Datei

Im ersten und zweiten Artikel wurde beschrieben, wie XML-Dokumente mit Hilfe von Linq to XML erzeugt und abgefragt werden können.
Im dritten und letzten Artikel dieser Artikelserie geht es um das Manipulieren eines XML-Dokuments. Es wird gezeigt wie Datensätze geändert, gelöscht und hinzugefügt werden können.
Damit werden alle grundlegenden Datenoperationen (CRUD) abgedeckt.

Als Grundlage für die Beispiele dient wieder die XML Datei, die schon im zweiten Teil verwendet wurde:

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<Adressen>
  <Adresse>
    <Name>Harry Bo</Name>
    <Telefon>02854925876</Telefon>
    <Anschrift>
      <Straße>Hansastraße 19</Straße>
      <Stadt>Düsseldorf</Stadt>
      <Postleitzahl>40210</Postleitzahl>
    </Anschrift>
  </Adresse>
  <Adresse>
    <Name>Anna Log</Name>
    <Telefon>0575459753</Telefon>
    <Anschrift>
      <Straße>Winzererstraße 15</Straße>
      <Stadt>Nürnberg</Stadt>
      <Postleitzahl>90001</Postleitzahl>
    </Anschrift>
  </Adresse>
  <Adresse>
    <Name>Maria Kron</Name>
    <Telefon>05359746358</Telefon>
    <Anschrift>
      <Straße>Aachener Straße 62</Straße>
      <Stadt>Hannover</Stadt>
      <Postleitzahl>10001</Postleitzahl>
    </Anschrift>
  </Adresse>  
  <Adresse>
    <Name>Axel Höhle </Name>
    <Telefon>0384887778</Telefon>
    <Anschrift>
      <Straße>Bahnhofstraße 21</Straße>
      <Stadt>Berlin</Stadt>
      <Postleitzahl>10001</Postleitzahl>
    </Anschrift>
  </Adresse> 
</Adressen>

Ändern eines Datensatzes

Dieses Beispiel soll zeigen, wie die Straße der Person "Maria Kron" verändert werden kann. Die Linq-Abfrage fragt im ersten Schritt die Person ab, deren Straße geändert werden soll.
Die Abfrage kann theoretisch mehrere Ergebnisse enthalten, wenn es mehrere Personen mit dem gleichen Namen geben würde. Aus diesem Grund gibt die Abfrage ein generische Liste zurück. Mit der Erweiterungsmethode First() wird der erste Datensatz aus dieser Liste zurückgegeben. Diese Vorgehensweise sollte nur dann gewählt werden, wenn in der where Bedingung mit einer eindeutigen ID verglichen wird. Für dieses Beispiel wird vorausgesetzt, dass es jeden Namen nur einmal gibt.
Die Methode SetElementValue() setzt den neuen Wert. Soll ein XML-Attribut geändert werden, kann die Methode SetAttributeValue() verwendet werden.

var anschrift = (from p in adressen.Elements()
                 where p.Element("Name").Value == person
                 select p).First();

anschrift.SetElementValue("Straße", neueStraße);

Wenn nicht nur ein Element geändert werden soll, sondern das ganze XElement, empfiehlt es sich, das ganze XElement abzufragen und dies mit der Methode ReplaceAll() zu ersetzen.

Löschen eines Datensatzes

Das löschen eines Datensatzes funktioniert genauso wie das Ändern eines Datensatzes, nur das nach der Abfrage die Methode Remove() aufgerufen wird.

(from p in adressen.Elements()
 where p.Element("Name").Value == nameDerPerson
 select p).Remove();


Wenn z.B. alle Telefonnummern aller Personen aus der Liste gelöscht werden sollen, kann das sehr einfach mit einer foreach Schleife gemacht werden:

foreach (var telefon in adressen.Descendants("Telefon").ToList())
    telefon.Value = string.Empty;

Einfügen eines neuen Datensatzes

Soll ein neuer Datensatz in das XML-Dokument eingefügt werden, muss zuerst ein neuer Datensatz angelegt werden. Ein Datensatz wird durch ein XElement repräsentiert.
Mit der Methode Add() kann der Datensatz einfach an das XML-Dokument angehängt werden.

var neuePerson = new XElement("Adresse",
                 new XElement("Name", name),
                 new XElement("Telefon", telefon),
                 new XElement("Anschrift",
                            new XElement("Straße", straße),
                            new XElement("Stadt", stadt),
                            new XElement("Postleitzahl", Postleitzahl)
                   )
      );
adressen.Add(neuePerson);


Möchte man den Datensatz an eine bestimmten Stelle einfügen, so kann das Dokument mit einer Schleife durchlaufen werden. Mit den Methoden AddBeforeSelf() und AddAfterSelf() kann das XElement an der entsprechenden Stelle einfügt werden.

Hinweis:
Alle oben beschriebenen Manipulationen des XML-Dokuments wirken sich nur auf die im Speicher liegenden XElemente oder das XDokument aus. Sollen die Änderungen persistiert werden, muss die Methode Save() aufgerufen werden:

adressen.Save(pathXmlFile);


Alle Beispiele sind in einem Beispielprojekt zusammengefasst.

Download Beispielprojekt

von Jan Welker, 22.06.2008 zugeordnet zu C# , Cliententwicklung , Tutorials , Webentwicklung .

Kommentare

Es sind noch keine Kommentare vorhanden.

Eigener Kommentar

Sie müssen angemeldet sein, um ein Kommentar zu erstellen.
  • Schwierigkeit: Einsteiger
  • Views: 9505
  • Zur Druckversion
  • Artikel von Jan Welker

Kick it on dotnet-kicks.de

Artikel

Autor

Kick it!

Wenn ihnen dieser Artikel gefällt, bitte "kicken" sie ihn.

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum