使用LINQ动态读取XML

时间:2012-11-06 14:59:29

标签: c# xml linq

Document miXML = new XDocument(

            new XElement("Alumnos",
                                new XElement("Alumno",
                                    new XAttribute("NoControl", "05231104"),
                                    new XElement("Nombre", "Edison García")),


                                 new XElement("Alumno",
                                    new XAttribute("NoControl", "05231106"),
                                    new XElement("Nombre", "Abraham Gomez García"),
                                    new XElement("Semestre", "9")),

                                new XElement("Alumno",
                                    new XAttribute("NoControl", "05231108"),
                                    new XElement("Nombre", "Alejandre Carvajal"),
                                    new XElement("Semestre", "7")),

                                new XElement("Alumno",
                                    new XAttribute("NoControl", "06231110"),
                                    new XElement("Nombre", "Luis Armando"),
                                    new XElement("Semestre", "10"))
                   )
            );


        StringReader sr = new StringReader(miXML.ToString());
        var testlinq = XElement.Load(sr).Elements();

        foreach(var abc in testlinq){

        var test2 = from p in abc.Descendants("Nombre") select p;
        var test3 = from p in abc.Descendants("Semestre") select p;
        }

这是创建的XML。 XML created

我想要一份字典列表 列表包括{“Nombre”,“Edison Garcia”},{{“Nombre”,“AbrahamGomezGarcía”},{“semestre”,“9”}}

任何帮助都将不胜感激。

我面临的问题: 1)如果没有semsetre我不能跳过它。它创建了IEnumerable。 2)动态地获取节点和值以进行硬编码。例如:    var test2 =来自p中的abc.Descendants(“Nombre”)选择p;

1 个答案:

答案 0 :(得分:2)

试试这个:

var testlinq = XElement.Load(sr);   
var test = testlinq.Descendants("Alumno")
                   .Select(x => x.Descendants()
                                 .ToDictionary(y => y.Name, y => y.Value )
                   ).ToList();