2013-08-29 66 views
0

本月我開始學習C#,並且正在創建一個程序來解析XML文件並獲取一些數據。 .xml文件是:檢查在foreach循環之前/期間是否存在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> 

我下面的代碼,從元素「名稱」和「類型」得到的值,從「符號」。但是我需要檢查每個「Symbol」中是否存在元素「Properties」,因爲如您所見,會有一些(如第一個「Symbol」)沒有「Properties」元素。 如果存在,我會從這個例子中得到值:「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); 
} 

預先感謝您^^

回答

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標籤零個或多個元素。

+0

完美,非常感謝! –

相關問題