检查在foreach循环之前/期间是否存在Xml元素

时间:2013-08-29 19:50:55

标签: c# xml xml-parsing foreach var

我本月开始学习C#,我正在创建一个程序来解析XML文件并获取一些数据。 .xml文件是:

<Info>
<Symbols>
<Symbol>
    <Name>Name</Name>
    <Type>INT</Type>
</Symbol>
<Symbol>
    <Name>Name</Name>
    <Type>INT</Type>
    <Properties>
        <Property>
            <Name>TAG</Name>
        </Property>
    </Properties>
</Symbol>
</Symbols>
</Info>

下面的代码,从“符号”中获取元素“名称”和“类型”的值。但我需要检查每个“符号”中是否存在元素“属性”,因为正如您所看到的,会有一些(如第一个“符号”)没有“属性”元素。 如果它存在,我将从中获取值,在这种情况下:“TAG”。 是否有一种简单的方法可以让foreach尝试只在它存在的情况下才能获得它?!

var symbols = from symbol in RepDoc.Element("Info").Element("Symbols").Descendants("Symbol")          

select new
{
VarName = symbol.Element("Name").Value,
VarType = symbol.Element("Type").Value,
};

foreach (var symbol in symbols) 
{
Console.WriteLine("" symbol.VarName + "\t" + symbol.VarType);
}

提前谢谢^^

1 个答案:

答案 0 :(得分:0)

var res = XDocument.Load(fname)
            .Descendants("Symbol")
            .Select(x => new
            {
                Name = (string)x.Element("Name"),
                Type = (string)x.Element("Type"),
                Props = x.Descendants("Property")
                       .Select(p => (string)p.Element("Name"))
                       .ToList()
            })
            .ToList();

Props将包含零个或多个元素,具体取决于Properties标记。