使用LINQ从同名的XDocument元素获取属性

时间:2013-10-31 18:34:43

标签: c# linq attributes linq-to-xml

我一直在编写一个使用XDocument存储员工数据的程序:

<!-- School Employee Data -->
<SchoolData storeName="mikveIsrael" location="mikve">
    <employee id="1">
        <personalInfo>
            <name>Ilan Berlinbluv</name>
            <zip>58505</zip>
        </personalInfo>
        <employeeInfo>
            <salary>5000</salary>
            <id>1</id>
        </employeeInfo>
    </employee>
    <employee id="2">...</employee>
</SchoolData>  

我希望我的程序能够阅读每个employee id attrib,但我不知道该怎么做。相反,我尝试这样做:

    var ids = from idz in doc.Descendants("SchoolData")
              select new
              {
                  id1 = idz.Element("employee").Attribute("id").Value
              };

其中doc是XDocument var。它只返回第一个,但我希望它返回arrayList<string>,我只是不知道如何遍历所有相同名称的employee元素。

2 个答案:

答案 0 :(得分:1)

XDocument doc = XDocument.Parse(xml);
List<string> ids = doc.Descendants("employee")
                        .Select(e => e.Attribute("id").Value)
                          .ToList();

答案 1 :(得分:1)

这可能会有所帮助:

var xDoc = XDocument.Load(path);

var result = xDoc.Descendants("employee")
                 .SelectMany(i => i.Attribute("id").Value)
                 .ToList();