Arbeiten mit Wörterbüchern unter Verwendung von LINQ to XML

Es ist häufig praktisch, Datenstrukturen verschiedener Arten in XML und dann von XML in andere Datenstrukturen zu konvertieren. In diesem Artikel wird die Konvertierung von Dictionary<TKey,TValue> in XML und zurück gezeigt.

Beispiel: Erstellen eines Wörterbuchs und Konvertieren des Inhalts in XML

In diesem ersten Beispiel wird ein Dictionary<TKey,TValue> erstellt und anschließend in XML konvertiert.

Bei dieser C#-Version dieses Beispiels kommt eine Form einer funktionalen Konstruktion zum Einsatz, bei der eine Abfrage neue XElement-Objekte projiziert, woraufhin die sich dabei ergebende Sammlung als Argument an den Konstruktor des XElement-Objekts übergeben wird.

Die Visual Basic-Version verwendet XML-Literale und eine Abfrage in einem eingebetteten Ausdruck. Die Abfrage projiziert neue XElement-Objekte, die dann zum neuen Inhalt für das RootXElement-Stammobjekt werden.

Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("Child1", "Value1");
dict.Add("Child2", "Value2");
dict.Add("Child3", "Value3");
dict.Add("Child4", "Value4");
XElement root = new XElement("Root",
    from keyValue in dict
    select new XElement(keyValue.Key, keyValue.Value)
);
Console.WriteLine(root);
Dim dict As Dictionary(Of String, String) = New Dictionary(Of String, String)()
dict.Add("Child1", "Value1")
dict.Add("Child2", "Value2")
dict.Add("Child3", "Value3")
dict.Add("Child4", "Value4")
Dim root As XElement = _
    <Root>
        <%= From keyValue In dict _
            Select New XElement(keyValue.Key, keyValue.Value) %>
    </Root>
Console.WriteLine(root)

Dieses Beispiel erzeugt die folgende Ausgabe:

<Root>
  <Child1>Value1</Child1>
  <Child2>Value2</Child2>
  <Child3>Value3</Child3>
  <Child4>Value4</Child4>
</Root>

Beispiel: Erstellen eines Wörterbuchs und Laden aus XML-Daten

Im nächsten Beispiel wird ein Wörterbuch aus XML-Daten geladen.

XElement root = new XElement("Root",
    new XElement("Child1", "Value1"),
    new XElement("Child2", "Value2"),
    new XElement("Child3", "Value3"),
    new XElement("Child4", "Value4")
);

Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (XElement el in root.Elements())
    dict.Add(el.Name.LocalName, el.Value);
foreach (string str in dict.Keys)
    Console.WriteLine("{0}:{1}", str, dict[str]);
Dim root As XElement = _
        <Root>
            <Child1>Value1</Child1>
            <Child2>Value2</Child2>
            <Child3>Value3</Child3>
            <Child4>Value4</Child4>
        </Root>

Dim dict As Dictionary(Of String, String) = New Dictionary(Of String, String)
For Each el As XElement In root.Elements
    dict.Add(el.Name.LocalName, el.Value)
Next
For Each str As String In dict.Keys
    Console.WriteLine("{0}:{1}", str, dict(str))
Next

Dieses Beispiel erzeugt die folgende Ausgabe:

Child1:Value1
Child2:Value2
Child3:Value3
Child4:Value4

Siehe auch