<?xml version="1.0" standalone="yes"?>
<CompanyInfo>
<Employee name="Jon" deptId="123">
<Region name="West">
<Area code="96" />
</Region>
<Region name="East">
<Area code="88" />
</Region>
</Employee>
</CompanyInfo>
public class Employee
{
public string EmployeeName { get; set; }
public string DeptId { get; set; }
public List<string> RegionList {get; set;}
}
public class Region
{
public string RegionName { get; set; }
public string AreaCode { get; set; }
}
私はこのXMLデータを読み込もうとしていますが、これまでのところ私はこれを試しました:
XDocument xml = XDocument.Load(@"C:\data.xml");
var xElement = xml.Element("CompanyInfo");
if (xElement != null)
foreach (var child in xElement.Elements())
{
Console.WriteLine(child.Name);
foreach (var item in child.Attributes())
{
Console.WriteLine(item.Name + ": " + item.Value);
}
foreach (var childElement in child.Elements())
{
Console.WriteLine("--->" + childElement.Name);
foreach (var ds in childElement.Attributes())
{
Console.WriteLine(ds.Name + ": " + ds.Value);
}
foreach (var element in childElement.Elements())
{
Console.WriteLine("------->" + element.Name);
foreach (var ds in element.Attributes())
{
Console.WriteLine(ds.Name + ": " + ds.Value);
}
}
}
}
これにより、各ノード、その属性名と値を取得できるため、これらのデータをデータベースの関連フィールドに保存できますが、これは、たとえば、XML 構造がすべての foreach ステートメントに必要な変更を行う場合など、複雑な方法で柔軟ではないようです。再訪、また、この方法でデータをフィルター処理することは困難です。データをフィルター処理する特定の if ステートメントを記述する必要があります (たとえば、West からのみ従業員を取得するなど...)
次のような linq を使用して、より柔軟な方法を探していました。
List<Employees> employees =
(from employee in xml.Descendants("CompanyInfo")
select new employee
{
EmployeeName = employee.Element("employee").Value,
EmployeeDeptId = ?? get data,
RegionName = ?? get data,
AreaCode = ?? get data,,
}).ToList<Employee>();
しかし、子ノードから値を取得してフィルタリングを適用する方法がわかりません(特定の従業員のみを取得するため)。これは可能ですか?どんな助けでも大歓迎です。
ありがとう