C#XML - 一次读取多个元素

时间:2014-01-04 08:54:30

标签: c# xml linq-to-xml

我有这个xml文档:

<?xml version="1.0" ?>
<object>
    <name>Sphere</name>
    <material>Steel</material>
    <device Id="01">
        <model>Model 1</model>
        <color>Red</color>
    </device>
    <device Id="02">
        <model>Model 2</model>
        <color>Blue</color>
    </device>
</object>

我希望能够在for循环中读取每个设备的模型和颜色。 我的代码一次只能读取一个值(模型或值),我必须经历两次循环。

我希望应该有一个更优雅的解决方案。

var xDoc = XDocument.Load(@"C:\_Projects\AProjectsCS\XML_Tutorial\Sample.xml");

IEnumerable<XElement> list1 = xDoc.Root.Descendants("model");  
IEnumerable<XElement> list2 = xDoc.XPathSelectElements("//color");  

foreach (XElement el in list1)
    Console.WriteLine(el.Value);

foreach (XElement el in list2)
    Console.WriteLine(el.Value);

谢谢, 尼克

1 个答案:

答案 0 :(得分:1)

只需从每个设备元素中选择模型和颜色元素值(您可以使用匿名类型,如下所示,或创建自定义Device类来保存此数据):

var xDoc = XDocument.Load(@"C:\_Projects\AProjectsCS\XML_Tutorial\Sample.xml");
var devices = from d in xDoc.Root.Elements("device")
              select new {
                  Model = (string)d.Element("model"),
                  Color = (string)d.Element("color")
              };

foreach(var device in devices)
{
    Console.WriteLine(device.Model);
    Console.WriteLine(device.Color);
}