1

XMLの子ノードを特定のリストに解析するための最良の方法は何ですか?これはXMLの小さな例です。

<Area Name="Grey Bathroom" IntegrationID="3" OccupancyGroupAssignedToID="141">
  <Outputs>
  <Output Name="Light/Exhaust Fan" IntegrationID="46" OutputType="NON_DIM" Wattage="0" /> 
  </Outputs>
</Area>

エリア名と呼ばれるリストなどを作成し、出力名とIntegrationIDの情報を保持したいと思います。そのため、リストを呼び出して、出力名とIntegrationIDを引き出すことができます。

すべてのエリア名のリストを作成してから出力のリストを作成することはできますが、「GreyBathroom」と呼ばれるリストを作成して出力「Light/ExhaustFan」をID46で保持する方法がわかりません。

4

2 に答える 2

1
XDocument doc = XDocument.Load(@"E:\a\b.xml");
        List<Area> result = new List<Area>();
        foreach (var item in doc.Elements("Area"))
        {
            var tmp = new Area();
            tmp.Name = item.Attribute("Name").Value;
            tmp.IntegrationID = int.Parse(item.Attribute("IntegrationID").Value);
            tmp.OccupancyGroupAssignedToID = int.Parse(item.Attribute("OccupancyGroupAssignedToID").Value);

            foreach (var bitem in item.Elements("Outputs"))
            {
                foreach (var citem in bitem.Elements("Output"))
                {
                    tmp.Outputs.Add(new Output
                    {
                        IntegrationID = int.Parse(citem.Attribute("IntegrationID").Value),
                        Name = citem.Attribute("Name").Value,
                        OutputType = citem.Attribute("OutputType").Value,
                        Wattage = int.Parse(citem.Attribute("Wattage").Value)
                    });
                }
            }
            result.Add(tmp);
        }

public class Area
{
    public String Name { get; set; }
    public int IntegrationID { get; set; }
    public int OccupancyGroupAssignedToID { get; set; }
    public List<Output> Outputs = new List<Output>();
}

public class Output
{
    public String Name { get; set; }
    public int IntegrationID { get; set; }
    public String OutputType { get; set; }
    public int Wattage { get; set; }
}
于 2012-12-23T04:08:52.567 に答える
0

この例では、匿名タイプを使用しています。あなたはあなた自身のものを使うことができます(そして私はあなたに暖かくアドバイスします)。

var doc = XDocument.Parse(xml);
var areaLists = doc.Elements("Area").
                    Select(e => e.Descendants("Output").
                        Select(d => new
                        {
                            Name = (string) d.Attribute("Name"),
                            Id = (int) d.Attribute("IntegrationID")
                        }).
                        ToArray()).
                    ToList();
于 2012-12-23T04:04:24.910 に答える