Werken met woordenlijsten met behulp van LINQ naar XML
Het is vaak handig om gegevensstructuren van verschillende soorten te converteren naar XML en vervolgens van XML naar andere gegevensstructuren. In dit artikel wordt een conversie van een Dictionary<TKey,TValue> naar XML en back weergegeven.
Voorbeeld: Een woordenlijst maken en de inhoud ervan converteren naar XML
In dit eerste voorbeeld wordt een Dictionary<TKey,TValue>en vervolgens geconverteerd naar XML.
Deze C#-versie van het voorbeeld maakt gebruik van een vorm van functionele constructie waarin een query nieuwe XElement objecten projecteert en de resulterende verzameling wordt doorgegeven als argument aan de constructor van het hoofdobject XElement .
De Visual Basic-versie maakt gebruik van letterlijke XML-gegevens en een query in een ingesloten expressie. De query projecteert nieuwe XElement objecten die vervolgens de nieuwe inhoud voor het Root
XElement object worden.
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)
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
<Root>
<Child1>Value1</Child1>
<Child2>Value2</Child2>
<Child3>Value3</Child3>
<Child4>Value4</Child4>
</Root>
Voorbeeld: Een woordenlijst maken en laden op basis van XML-gegevens
In het volgende voorbeeld wordt een woordenlijst gemaakt die wordt geladen op basis van XML-gegevens.
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
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
Child1:Value1
Child2:Value2
Child3:Value3
Child4:Value4