0

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

提前谢谢你^^

4

1 回答 1

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

PropsProperties根据标签将有零个或多个元素。

于 2013-08-29T20:02:46.030 回答