【问题标题】:Check if Xml Element exists before/during a foreach loop在 foreach 循环之前/期间检查 Xml 元素是否存在
【发布时间】:2013-09-02 09:50:03
【问题描述】:

我这个月开始学习 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);
}

提前谢谢你^^

【问题讨论】:

    标签: c# xml xml-parsing foreach var


    【解决方案1】:
    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 标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2017-08-10
      相关资源
      最近更新 更多