-1

そこで、ユーザーと ControlNumbers のディクショナリを取り込んで XML に出力する次の関数があります。これを非常にうまく行ったLINQをオンラインで見つけました。しかし、私には小さな問題が 1 つあります。

    static Dictionary<string, User> UserClassDict = new Dictionary<string, User>();
     static void DictionaryToXML(Dictionary<string,User> UserClassDict)
        {
            XElement el = new XElement("root", UserClassDict.Select(kv => new XElement(kv.Key, kv.Value.ControlNumber

)));
        }

XML は次のようになります。

    <root>
  <adolan>792365</adolan>
  <afeazell>791964</afeazell>
  <amsmith>790848</amsmith>
  <asnyder>790948789358</asnyder>
</root>

しかし、ご覧のとおり、ControlNumbers は通常 6 桁の長さです (ただし、常にそうであるとは限りません)。私がしたいことは、これに似たものです。

    <root>
<adolan>
<controlNumbers>123456</controlNumbers>
 </adolan>
<asnyder>
<controlNumbers>222111</controlNumbers>
<controlNumbers>333222</controlNumbers>
</asnyder>
</root>

最終的には、起動時にプログラムにこの XML ファイルを読み取らせ、Dictionary に入力することで、この XML が最終的にかなり大きくなるようにします。どんなアイデアも役に立ちます。

4

3 に答える 3

2

これを試して

XElement el = new XElement("root",
      UserClassDict.Select(kv => new XElement(kv.Key, 
       kv.Value.ControlNumbers.Select(num => new XElement("controlNumbers", num))))
);
于 2013-06-06T22:34:43.733 に答える
0

辞書で 2 つ以上の制御番号がどのように表現されているかは完全にはわかりませんが、より複雑な xlm 生成を行いたい場合は、メソッドを呼び出すようにラムダを変更できます。

kv => new XElement(kv.Key, kv.Value.ControlNumber)

に変わります

kv => BuildXMLElement(kv)

BuildXMLElementそして、好きなように要素を構築するために実装できます

于 2013-06-06T22:28:12.963 に答える
0

あなたのエルをに変更してください

 XElement el = new XElement("root", UserClassDict.
            Select(kv => new XElement(kv.Key, 
                from it in kv.Value.ControlNumber
                select new XElement("controlNumbers", it)
                )));

上記の LINQ クエリは、複数の controlNumbers タグを作成します

連結するには、使用します

XElement el = new XElement("root", UserClassDict.
            Select(kv => new XElement(kv.Key, 
                String.Join(",", kv.Value.ControlNumber.ToArray())
                )));
于 2013-06-06T22:30:36.480 に答える