Dela via


Så här arbetar du med ordlistor med LINQ till XML

Det är ofta praktiskt att konvertera datastrukturer av olika slag till XML och sedan från XML till andra datastrukturer. Den här artikeln visar en konvertering av en Dictionary<TKey,TValue> till XML och tillbaka.

Exempel: Skapa en ordlista och konvertera dess innehåll till XML

Det första exemplet skapar en Dictionary<TKey,TValue>och konverterar den sedan till XML.

Den här C#-versionen av exemplet använder en form av funktionell konstruktion där en fråga projicerar nya XElement objekt, och den resulterande samlingen skickas som ett argument till konstruktorn för rotobjektet XElement .

Visual Basic-versionen använder XML-literaler och en fråga i ett inbäddat uttryck. Frågan projicerar nya XElement objekt som sedan blir det nya innehållet för Root XElement objektet.

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)

Det här exemplet genererar följande utdata:

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

Exempel: Skapa en ordlista och läs in den från XML-data

I nästa exempel skapas en ordlista som läser in den från XML-data.

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

Det här exemplet genererar följande utdata:

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

Se även