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 Root
XElement-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