Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ转换为XML。如何查询列表<;T>;使用Linq递归_C#_Xml_Linq_Xelement - Fatal编程技术网

C# LINQ转换为XML。如何查询列表<;T>;使用Linq递归

C# LINQ转换为XML。如何查询列表<;T>;使用Linq递归,c#,xml,linq,xelement,C#,Xml,Linq,Xelement,我正在从结构生成XML文件。某些结构成员在列表中类型。我正在使用linq查询,但在某种程度上我被卡住了 我的结构如下所示: public struct Project { public string name; public List<Class> classes; } public struct Class { public string name; public int class_id; public List<Var> v

我正在从结构生成XML文件。某些结构成员在
列表中
类型。我正在使用linq查询,但在某种程度上我被卡住了

我的结构如下所示:

public struct Project
{
    public string name;
    public List<Class> classes;
}

public struct Class
{
    public string name;
    public int class_id;
    public List<Var> vars;
}

public struct Var
{
    public string name;
    public string description;
    public int var_id;
    public List<Element> elements;
}

public struct Element
{
    public string name;
    public string description;
    public int element_id;
    public List<Element> elements;
    public List<Enm> enums;
}

public struct Enm
{
    public string name;
    public int value;
}
有没有一种简单的方法可以用最少的代码行来实现这一点?我认为必须有一种递归方法来解决我的问题。

使用Xml序列化

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication132
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;

            XmlWriter writer = XmlWriter.Create(FILENAME, settings);
            XmlSerializer serializer = new XmlSerializer(typeof(Project));
            Project project = new Project();
            serializer.Serialize(writer, project);
        }
    }
    [XmlRoot("PROJECT")]
    public class Project
    {
        [XmlAttribute]
        public string name { get; set; }
        [XmlElement("CLASS")]
        public List<cClass> classes { get; set; }

        public Project()
        {
            name = "test project xml";
            classes = new List<cClass>() {
                new cClass() {
                    name = "class1",
                    class_id = 1,
                    vars = new List<Var>() {
                        new Var() { 
                            name = "var name 1",
                            description = "var description",
                            var_id = 1,
                            elements = new List<Element>() {
                                new Element() {
                                   name = "element name 1",
                                   description = "element description",
                                   element_id = 1
                                },
                                new Element() {
                                   name = "element name 2",
                                   description = "element description",
                                   element_id = 2,
                                   elements = new List<Element>() {
                                       new Element() {
                                           name = "element name 3",
                                           description = "element description",
                                           element_id = 3
                                       }
                                   }
                                },
                                new Element() {
                                   name = "element name 4",
                                   description = "element description",
                                   element_id = 4,
                                   elements = new List<Element>() {
                                        new Element() {
                                           name = "element name 5",
                                           description = "element description",
                                           element_id = 5,
                                           elements = new List<Element>() {
                                               new Element() {
                                                   name = "element name 6",
                                                   description = "element description",
                                                   element_id = 6
                                               }
                                           }
                                        }
                                   }
                                },
                                new Element() {
                                   name = "element name 7",
                                   description = "element description",
                                   element_id = 7,
                                   enums = new List<Enm>() {
                                       new Enm() {
                                          name = "option 1",
                                          value = 1
                                       },
                                       new Enm() {
                                          name = "option 2",
                                          value = 2
                                       },
                                       new Enm() {
                                          name = "option 3",
                                          value = 3
                                       }
                                   }
                                }
                            }
                        },
                        new Var() { 
                            name = "var name 2",
                            description = "var description",
                            var_id = 2,
                            elements = new List<Element>() {
                                new Element() {
                                   name = "element name 8",
                                   description = "element description",
                                   element_id = 8
                                }
                            }
                        }
                   }
                }
            };

        }
    }

    public class cClass
    {
        [XmlAttribute]
        public string name { get; set; }
        [XmlAttribute]
        public int class_id;
        [XmlElement("VAR")]
        public List<Var> vars;
    }

    public class Var
    {
        [XmlAttribute]
        public string name;
        [XmlAttribute]
        public string description;
        [XmlAttribute]
        public int var_id;
        [XmlElement("ELEMENT")]
        public List<Element> elements;
    }

    public struct Element
    {
        [XmlAttribute]
        public string name;
        [XmlAttribute]
        public string description;
        [XmlAttribute]
        public int element_id;
        [XmlElement("ELEMENT")]
        public List<Element> elements;
        [XmlElement("EMNU")]
        public List<Enm> enums;
    }

    public struct Enm
    {
        [XmlAttribute]
        public string name;
        [XmlAttribute]
        public int value;
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
命名空间控制台应用程序132
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XmlWriterSettings=新的XmlWriterSettings();
settings.Indent=true;
XmlWriter=XmlWriter.Create(文件名、设置);
XmlSerializer serializer=新的XmlSerializer(typeof(Project));
项目=新项目();
序列化器。序列化(编写器、项目);
}
}
[XmlRoot(“项目”)]
公共类项目
{
[XmlAttribute]
公共字符串名称{get;set;}
[XmlElement(“类”)]
公共列表类{get;set;}
公共工程()
{
name=“测试项目xml”;
类=新列表(){
新类别(){
name=“class1”,
class_id=1,
vars=新列表(){
新变量(){
name=“var name 1”,
description=“var description”,
var_id=1,
元素=新列表(){
新元素(){
name=“元素名称1”,
description=“元素描述”,
元素_id=1
},
新元素(){
name=“元素名称2”,
description=“元素描述”,
元素_id=2,
元素=新列表(){
新元素(){
name=“element name 3”,
description=“元素描述”,
元素_id=3
}
}
},
新元素(){
name=“element name 4”,
description=“元素描述”,
元素_id=4,
元素=新列表(){
新元素(){
name=“element name 5”,
description=“元素描述”,
元素_id=5,
元素=新列表(){
新元素(){
name=“element name 6”,
description=“元素描述”,
元素_id=6
}
}
}
}
},
新元素(){
name=“element name 7”,
description=“元素描述”,
元素_id=7,
enums=新列表(){
新Enm(){
name=“选项1”,
值=1
},
新Enm(){
name=“选项2”,
值=2
},
新Enm(){
name=“选项3”,
值=3
}
}
}
}
},
新变量(){
name=“var name 2”,
description=“var description”,
var_id=2,
元素=新列表(){
新元素(){
name=“element name 8”,
description=“元素描述”,
元素id=8
}
}
}
}
}
};
}
}
公共类
{
[XmlAttribute]
公共字符串名称{get;set;}
[XmlAttribute]
公共int class_id;
[XmlElement(“VAR”)]
公共列表变量;
}
公共类变量
{
[XmlAttribute]
公共字符串名称;
[XmlAttribute]
公共字符串描述;
[XmlAttribute]
公共内部变量id;
[XmlElement(“元素”)]
公共清单要素;
}
公共结构元素
{
[XmlAttribute]
公共字符串名称;
XElement elm = new XElement("PROJECT", new XAttribute("name" project.name),
    project.classes.Select(x=> new XElement("CLASS", new XAttribute("name", x.name), new XAttribute("class_id", x.class_id),
        x.vars.Select(v=> new XElement("VAR", new XAttribute("name", v.name), new XAttribute("description", v.description), new XAttribute("var_id", v.var_id),
            v.elements.Select(e=> new XElement("ELEMENT", new XAttribute("name", e.name),new XAttribute("description", e.description),new XAttribute("element_id", e.element_id)
            )))))));
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication132
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;

            XmlWriter writer = XmlWriter.Create(FILENAME, settings);
            XmlSerializer serializer = new XmlSerializer(typeof(Project));
            Project project = new Project();
            serializer.Serialize(writer, project);
        }
    }
    [XmlRoot("PROJECT")]
    public class Project
    {
        [XmlAttribute]
        public string name { get; set; }
        [XmlElement("CLASS")]
        public List<cClass> classes { get; set; }

        public Project()
        {
            name = "test project xml";
            classes = new List<cClass>() {
                new cClass() {
                    name = "class1",
                    class_id = 1,
                    vars = new List<Var>() {
                        new Var() { 
                            name = "var name 1",
                            description = "var description",
                            var_id = 1,
                            elements = new List<Element>() {
                                new Element() {
                                   name = "element name 1",
                                   description = "element description",
                                   element_id = 1
                                },
                                new Element() {
                                   name = "element name 2",
                                   description = "element description",
                                   element_id = 2,
                                   elements = new List<Element>() {
                                       new Element() {
                                           name = "element name 3",
                                           description = "element description",
                                           element_id = 3
                                       }
                                   }
                                },
                                new Element() {
                                   name = "element name 4",
                                   description = "element description",
                                   element_id = 4,
                                   elements = new List<Element>() {
                                        new Element() {
                                           name = "element name 5",
                                           description = "element description",
                                           element_id = 5,
                                           elements = new List<Element>() {
                                               new Element() {
                                                   name = "element name 6",
                                                   description = "element description",
                                                   element_id = 6
                                               }
                                           }
                                        }
                                   }
                                },
                                new Element() {
                                   name = "element name 7",
                                   description = "element description",
                                   element_id = 7,
                                   enums = new List<Enm>() {
                                       new Enm() {
                                          name = "option 1",
                                          value = 1
                                       },
                                       new Enm() {
                                          name = "option 2",
                                          value = 2
                                       },
                                       new Enm() {
                                          name = "option 3",
                                          value = 3
                                       }
                                   }
                                }
                            }
                        },
                        new Var() { 
                            name = "var name 2",
                            description = "var description",
                            var_id = 2,
                            elements = new List<Element>() {
                                new Element() {
                                   name = "element name 8",
                                   description = "element description",
                                   element_id = 8
                                }
                            }
                        }
                   }
                }
            };

        }
    }

    public class cClass
    {
        [XmlAttribute]
        public string name { get; set; }
        [XmlAttribute]
        public int class_id;
        [XmlElement("VAR")]
        public List<Var> vars;
    }

    public class Var
    {
        [XmlAttribute]
        public string name;
        [XmlAttribute]
        public string description;
        [XmlAttribute]
        public int var_id;
        [XmlElement("ELEMENT")]
        public List<Element> elements;
    }

    public struct Element
    {
        [XmlAttribute]
        public string name;
        [XmlAttribute]
        public string description;
        [XmlAttribute]
        public int element_id;
        [XmlElement("ELEMENT")]
        public List<Element> elements;
        [XmlElement("EMNU")]
        public List<Enm> enums;
    }

    public struct Enm
    {
        [XmlAttribute]
        public string name;
        [XmlAttribute]
        public int value;
    }

}