Comment utiliser des dictionnaires à l’aide de LINQ to XML
Il est souvent pratique de convertir des structures de données de différents types en XML, puis de XML vers d’autres structures de données. Cet article montre la conversion d’un Dictionary<TKey,TValue> au format XML et retour.
Exemple : créer un dictionnaire et convertir son contenu en XML
Ce premier exemple crée un Dictionary<TKey,TValue>, puis le convertit en XML.
Cette version C# de l’exemple utilise une forme de construction fonctionnelle dans laquelle une requête projette de nouveaux objets XElement et la collection résultante est passée comme argument au constructeur de l’objet XElement Root.
La version Visual Basic utilise des littéraux XML et une requête dans une expression incorporée. La requête projette de nouveaux objets XElement qui deviennent le nouveau contenu de l’objet Root
XElement.
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)
Cet exemple produit la sortie suivante :
<Root>
<Child1>Value1</Child1>
<Child2>Value2</Child2>
<Child3>Value3</Child3>
<Child4>Value4</Child4>
</Root>
Exemple : créer un dictionnaire et le charger à partir de données XML
L’exemple suivant crée un dictionnaire et le charge à partir de données XML.
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
Cet exemple produit la sortie suivante :
Child1:Value1
Child2:Value2
Child3:Value3
Child4:Value4