-1

Dictionary<int, List<Object>>XMLファイルにデータを書き込みたい。以下のコードを試しました:

Dictionary<int, List<Author>> _empdata = new Dictionary<int, List<Author>>();
List<Author> _author1 = new List<Author> { new Author() { id = 1, name = "Tom", age = 25 } };
List<Author> _author2 = new List<Author> { new Author() { id = 2, name = "Jerry", age = 15 } };

_empdata.Add(1, _author1);
_empdata.Add(2, _author2);

string fileName = "Author_" + string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
string filePath = Path.Combine(Directory.GetCurrentDirectory(), fileName) + ".xml";

            XElement elem = new XElement("StackOverflow");
            foreach (KeyValuePair<int,List<Author>> pair in _empdata)
            {
                elem = new XElement("AUTHORDATA",
                from item in pair.Value
                select new XElement("AUTHOR",
                       new XElement("ID", item.id),
                       new XElement("NAME", item.name),
                       new XElement("AGE", item.age)
                       ));
            }
            elem.Save(filePath);

私の予想される出力は次のとおりです。

<AUTHORDATA>
  <AUTHOR>
    <ID>1</ID>
    <NAME>Tom</NAME>
    <AGE>25</AGE>
  </AUTHOR>
  <AUTHOR>
    <ID>2</ID>
    <NAME>Jerry</NAME>
    <AGE>15</AGE>
  </AUTHOR>
</AUTHORDATA>

しかし、私は XML ファイルの以下のレコードを取得しています:

 <AUTHORDATA>
   <AUTHOR>
      <ID>2</ID>
      <NAME>Jerry</NAME>
      <AGE>15</AGE>
    </AUTHOR>
 </AUTHORDATA>

毎回XMLファイルに最後のリストレコードを書き込むだけです。どうすればこれを修正できますか? 注: XML ファイルの形式は上記のようになります。

どんな助けでも大歓迎です。

4

2 に答える 2

3

[編集] 申し訳ありませんが、あなたのリクエストを誤解していました:

XElement ad = new XElement("AUTHORDATA");
XElement elem = new XElement("StackOverflow", ad);

foreach (KeyValuePair<int, List<Author>> pair in _empdata)
{
    ad.Add(new XElement("AUTHORDATA",
        from item in pair.Value
        select new XElement("AUTHOR",
               new XElement("ID", item.id),
               new XElement("NAME", item.name),
               new XElement("AGE", item.age)
    ));
}

elem.Save(filePath);
于 2013-01-19T23:24:20.240 に答える
2

ループで作成されたノードをノードに追加する必要がありAUTHORDATAます。

var authorData = new XElement("AUTHORDATA");
var root = new XElement("StackOverflow", authorData);
foreach (KeyValuePair<int,List<Author>> pair in _empdata)
{
    authorData.Add(
        from item in pair.Value
        select new XElement("AUTHOR",
            new XElement("ID", item.id),
            new XElement("NAME", item.name),
            new XElement("AGE", item.age)
        ));
}

root.Save(filePath);
于 2013-01-19T23:36:06.567 に答える