using System.Collections.Generic;
public static void Main()
const string xml = @"<imgdir name=""Eqp.img"">
<imgdir name=""Accessory"">
<imgdir name=""1010000"">
<string name=""name"" value=""Long Brown Beard""/>
<imgdir name=""1010001"">
<string name=""name"" value=""Goatee""/>
<imgdir name=""1010002"">
<string name=""name"" value=""Ninja Mask for Men""/>
<imgdir name=""1010003"">
<string name=""name"" value=""5 O'Clock Shadow""/>
<imgdir name=""1010004"">
<string name=""name"" value=""General's Mustache (1)""/>
<imgdir name=""1010005"">
<string name=""name"" value=""General's Mustache (2)""/>
<imgdir name=""1010006"">
<string name=""name"" value=""Yakuza Scar""/>
<imgdir name=""1011000"">
<string name=""name"" value=""Ninja Mask for Women""/>
<imgdir name=""1011001"">
<string name=""name"" value=""SF Ninja Mask""/>
var doc = XDocument.Parse(xml);
var items = from imgdir in doc.Descendants("imgdir")
let name = (string) imgdir.Attribute("name")
from id in TryParseInteger(name)
from description in imgdir.Elements("string").Attributes("value").Take(1)
select new {Id = id, Description = description.Value};
foreach (var item in items)
Console.WriteLine($"{item.Id}: {item.Description}");
private static IEnumerable<int> TryParseInteger(string value)
if (int.TryParse(value, out result))