次の方法で共有


方法 : LINQ to XML を使用してディクショナリを操作する

さまざまなデータ構造と XML を相互に変換すると便利な場合がよくあります。 このトピックでは、Dictionary<TKey, TValue> と XML を相互に変換することによる、一般的な相互変換の実装について説明します。

使用例

C# の例では、新しい XElement オブジェクトをクエリが射影する、関数型構築の形式を使用します。結果のコレクションは、引数としてルート XElement オブジェクトのコンストラクターに渡されます。

Visual Basic の例では、XML リテラルと組み込み式内のクエリを使用します。 このクエリは、新しい XElement オブジェクトを射影します。射影されたオブジェクトは、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)

このコードを実行すると、次の出力が生成されます。

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

次のコードは、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

このコードによって、次の出力が生成されます。

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

参照

概念

射影と変換 (LINQ to XML)