私はこのようなコードを持っています:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
string xml = @"<Root>
<Report1>
<Row>
<Field1>data1-1</Field1>
<Field2>data1-2</Field2>
<!-- many more fields -->
</Row>
<Row>
<Field1>data2-1</Field1>
<Field2>data2-2</Field2>
<!-- many more fields -->
</Row>
</Report1>
</Root>";
XDocument doc = XDocument.Parse(xml);
var report1 = from report in doc.Root.Elements("Report1").Elements("Row")
select new Dictionary<string, string>()
{
{"Field1", report.Elements("Field1").First().Value},
{"Field2", report.Elements("Field2").First().Value}
};
var i = 1;
foreach (Dictionary<string, string> dict in report1)
{
Console.WriteLine(String.Format("Row{0}: ", i));
Console.WriteLine(" Field1: {0}", dict["Field1"]);
Console.WriteLine(" Field2: {0}", dict["Field2"]);
i++;
}
Console.ReadLine();
}
}
これらの辞書オブジェクトを宣言するために使用できる文字列配列またはその他のデータ構造を定義することは可能でしょうか?これが私の考えを示すのに役立ついくつかのばかげた擬似コードです:
編集以下の擬似コードの変数fieldNamesは、xmlソースフィールド名に基づくのではなく、私が期待する名前の配列になります。fieldNames配列に明示的に設定されていないxmlソース内のフィールド名は無視します。
var report1 = from report in doc.Root.Elements("Report1").Elements("Row")
select new Dictionary<string, string>()
{
foreach (var fieldName in fieldNames)
{
{fieldName, report.Elements(fieldName).First().Value}
}
};