C# 解析xml子节点

C# 解析xml子节点,c#,xml,list,children,C#,Xml,List,Children,将XML子节点解析为特定列表的最佳方法是什么?这是XML的一个小示例 <Area Name="Grey Bathroom" IntegrationID="3" OccupancyGroupAssignedToID="141"> <Outputs> <Output Name="Light/Exhaust Fan" IntegrationID="46" OutputType="NON_DIM" Wattage="0" /> </Outputs&

将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


我可以创建一个包含所有区域名称的列表,然后创建一个输出列表,但我不知道如何创建一个名为“灰色浴室”的列表,并保存ID为46的输出“灯光/排气扇”。

该示例使用匿名类型。你可以(我热情地建议你)用你自己的

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();

该示例使用匿名类型。你可以(我热情地建议你)用你自己的

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();
XDocument doc=XDocument.Load(@“E:\a\b.xml”);
列表结果=新列表();
foreach(单据要素(“区域”)中的可变项目)
{
var tmp=新区域();
tmp.Name=item.Attribute(“Name”).Value;
tmp.IntegrationID=int.Parse(item.Attribute(“IntegrationID”).Value);
tmp.occuncygroupassignedtoid=int.Parse(item.Attribute(“occuncygroupassignedtoid”).Value);
foreach(item.Elements(“输出”)中的变量bitem)
{
foreach(bitem.Elements(“输出”)中的var citem)
{
tmp.Outputs.Add(新输出
{
IntegrationID=int.Parse(citem.Attribute(“IntegrationID”).Value),
Name=citem.Attribute(“Name”).Value,
OutputType=citem.Attribute(“OutputType”).Value,
瓦特数=int.Parse(citem.Attribute(“瓦特数”).Value)
});
}
}
结果:添加(tmp);
}
公共课区
{
公共字符串名称{get;set;}
公共整数集成ID{get;set;}
public int-occuncygroupassignedtoid{get;set;}
公共列表输出=新列表();
}
公共类输出
{
公共字符串名称{get;set;}
公共整数集成ID{get;set;}
公共字符串输出类型{get;set;}
公共整数瓦数{get;set;}
}
XDocument doc=XDocument.Load(@“E:\a\b.xml”);
列表结果=新列表();
foreach(单据要素(“区域”)中的可变项目)
{
var tmp=新区域();
tmp.Name=item.Attribute(“Name”).Value;
tmp.IntegrationID=int.Parse(item.Attribute(“IntegrationID”).Value);
tmp.occuncygroupassignedtoid=int.Parse(item.Attribute(“occuncygroupassignedtoid”).Value);
foreach(item.Elements(“输出”)中的变量bitem)
{
foreach(bitem.Elements(“输出”)中的var citem)
{
tmp.Outputs.Add(新输出
{
IntegrationID=int.Parse(citem.Attribute(“IntegrationID”).Value),
Name=citem.Attribute(“Name”).Value,
OutputType=citem.Attribute(“OutputType”).Value,
瓦特数=int.Parse(citem.Attribute(“瓦特数”).Value)
});
}
}
结果:添加(tmp);
}
公共课区
{
公共字符串名称{get;set;}
公共整数集成ID{get;set;}
public int-occuncygroupassignedtoid{get;set;}
公共列表输出=新列表();
}
公共类输出
{
公共字符串名称{get;set;}
公共整数集成ID{get;set;}
公共字符串输出类型{get;set;}
公共整数瓦数{get;set;}
}

谢谢Kisame。这非常有帮助。谢谢你。这很有帮助。