Procédure : travailler avec des dictionnaires à l'aide de LINQ to XML
Il est souvent plus pratique de convertir différentes structures de données au format XML et du format XML vers d'autres structures de données. Cette rubrique présente une implémentation spécifique de cette approche générale en convertissant un objet Dictionary<TKey, TValue> au format XML et inversement.
Exemple
La version C# de cet 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 de cet exemple utilise des littéraux XML et une requête dans une expression incorporée. La requête projette de nouveaux objets XElement, qui deviennent ensuite 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)
Ce code génère la sortie suivante :
<Root>
<Child1>Value1</Child1>
<Child2>Value2</Child2>
<Child3>Value3</Child3>
<Child4>Value4</Child4>
</Root>
Le code suivant crée un dictionnaire à 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
Ce code génère la sortie suivante :
Child1:Value1
Child2:Value2
Child3:Value3
Child4:Value4