读取xml节点值生成一个实体类,读取xml所有节点值,读取所有xml所有节点名称

简介:
  public partial class WebFormClassByEntity : System.Web.UI.Page
    {
        List<string> list = new List<string>();//存放所有节点名称
        protected void Page_Load(object sender, EventArgs e)
        {
            //读取xml的文件路径
            string filePaht = Server.MapPath("~/KJ881101REC_GDXYKJWL_20150519112906795045.xml");
            getxml(filePaht, list);
            ClaseEntity();
        }


        /// <summary>
        /// 获取指定路径下XML的所有节点值
        /// </summary>
        public List<string> getxml(string xmlFilePath, List<string> list)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                if (File.Exists(xmlFilePath))
                {
                    doc.Load(xmlFilePath);
                    XmlNodeList xnl = doc.DocumentElement.ChildNodes;
                    GetAllNodes(xnl, list);
                }
                else
                {
                    list.Add("Error:");
                    list.Add("Please make sure the path and file are correct!!");
                }
                return list;

            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 递归遍历所有节点
        /// </summary>
        /// <param name="nodelist"></param>
        /// <param name="listnode"></param>
        /// <returns></returns>
        public List<string> GetAllNodes(XmlNodeList nodelist, List<string> listnode)
        {

            foreach (XmlElement element in nodelist)
            {
                //如果这个节点没有出现过,则添加到list列表
                if (!listnode.Contains(element.Name))
                {
                    listnode.Add(element.Name);
                }
                if (element.ChildNodes[0] is XmlText)
                {
                    continue;
                }
                else
                {
                    GetAllNodes(element.ChildNodes, listnode);
                }
            }
            return listnode;
        }

        /// <summary>
        /// 生成实体类
        /// </summary>
        public void ClaseEntity()
        {
            //准备一个代码编译器单元
            CodeCompileUnit unit = new CodeCompileUnit();
            //准备必要的命名空间(这个是指要生成的类的空间)
            CodeNamespace sampleNamespace = new CodeNamespace("测试_命名空间");//命名空间名称
            //导入必要的命名空间
            sampleNamespace.Imports.Add(new CodeNamespaceImport("System"));//引用的命名空间
            sampleNamespace.Imports.Add(new CodeNamespaceImport("System.Xml"));//引用的命名空间
            //准备要生成的类的定义
            CodeTypeDeclaration Customerclass = new CodeTypeDeclaration("Customer");//类名称
            //指定这是一个Class
            Customerclass.IsClass = true;
            Customerclass.TypeAttributes = TypeAttributes.Public | TypeAttributes.Public;
            //把这个类放在这个命名空间下
            sampleNamespace.Types.Add(Customerclass);
            //把该命名空间加入到编译器单元的命名空间集合中
            unit.Namespaces.Add(sampleNamespace);
            string outputFile = "E://work//生成实体类程序//WebApplication1//WebApplication1//Customer.cs";//生成的类存放的路径 //这是输出文件

            //List<string> list = new List<string>();
            //list.Add("id");
            //list.Add("name");
            foreach (var types in list)
            {
                //添加字段
                CodeMemberField field = new CodeMemberField(typeof(System.String), "_" + types);
                field.Attributes = MemberAttributes.Private;
                Customerclass.Members.Add(field);

                //添加属性
                CodeMemberProperty property = new CodeMemberProperty();
                property.Attributes = MemberAttributes.Public | MemberAttributes.Final;
                property.Name = types;
                property.HasGet = true;
                property.HasSet = true;
                property.Type = new CodeTypeReference(typeof(System.String));

                property.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "_" + types)));

                property.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "_" + types), new CodePropertySetValueReferenceExpression()));

                Customerclass.Members.Add(property);
            }

            Customerclass.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(SerializableAttribute))));
            //生成代码
            CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
            CodeGeneratorOptions options = new CodeGeneratorOptions();
            options.BracingStyle = "C";
            options.BlankLinesBetweenMembers = true;
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(outputFile))
            {
                provider.GenerateCodeFromCompileUnit(unit, sw, options);
            }
        }

    }

本文转自程序猿博客51CTO博客,原文链接http://blog.51cto.com/haihuiwei/1677956如需转载请自行联系原作者


365850153

相关文章
|
3天前
|
XML JavaScript 数据格式
XML DOM - 导航节点
在XML DOM中,节点导航涉及利用如parentNode、childNodes、firstChild、lastChild、nextSibling和previousSibling等属性。通过这些关系,可以访问和操作XML文档结构。例如,给定一个XML文档,可以使用getElementsByTagName找到特定元素,并通过parentNode属性获取该元素的父节点。在提供的实例中,代码加载&quot;books.xml&quot;,选取第一个&lt;book&gt;元素,并打印出其父节点的名称。
|
3天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了如何遍历XML文档的DOM节点树。通过循环节点,可以访问并处理每个元素,如提取值。示例代码展示了加载XML字符串到`xmlDoc`后,遍历根元素的所有子节点,打印出节点名及文本值,例如:&quot;title: Everyday Italian&quot;、&quot;author: Giada De Laurentiis&quot;和&quot;year: 2005&quot;。
|
3天前
|
XML JavaScript 前端开发
XML DOM 节点信息
XML DOM提供nodeName、nodeValue和nodeType属性来揭示节点详情。一个JavaScript示例展示了如何运用这些属性:loadXMLDoc函数加载XML文件&quot;books.xml&quot;,然后通过nodeName获取根元素名,用nodeValue提取文本节点的内容。
|
3天前
|
XML JavaScript 数据格式
XML DOM 节点列表
`getElementsByTagName()` 和 `childNodes` 返回 XML DOM 中的节点列表,表现为按顺序排列的节点集合。节点通过 0 开始的索引访问。例如,以下代码加载 &quot;books.xml&quot;,获取所有 `&lt;title&gt;` 元素的节点列表,然后提取第一个 `&lt;title&gt;` 的文本内容:`xmlDoc.getElementsByTagName(&quot;title&quot;)[0].childNodes[0].nodeValue`,结果为 &quot;Everyday Italian&quot;。
|
3天前
|
XML 存储 JavaScript
XML DOM - 访问节点
`getElementsByTagName()` 方法用于访问 XML 文档中的节点,返回一个节点列表(Node List),类似数组。可通过循环或导航节点关系来遍历和访问这些节点。示例代码加载 &quot;books.xml&quot; 到 xmlDoc,将结果存入变量 x。
|
3天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
该文介绍了如何遍历XML文档的节点树。通过循环移动,可以访问每个元素并提取其值。示例代码展示了一个XML文档的遍历过程,输出了所有子节点的名称和值,如&quot;title: Everyday Italian&quot;等。首先加载XML到xmlDoc,然后获取根元素的子节点,并依次打印节点名及文本内容。
|
3天前
|
XML 存储 JavaScript
XML DOM - 访问节点
`getElementsByTagName()` 方法从 `xmlDoc` 加载 &quot;books.xml&quot;,创建一个包含匹配节点的节点列表。该列表可遍历以访问每个节点,实现对 XML 文档的节点访问和导航。
|
3天前
|
XML 存储 JavaScript
XML DOM 节点
**DOM 把XML文档拆解为节点:** - 文档是个文档节点 - 每个元素是元素节点 - 文本、属性和注释各为独立节点 - 元素内的文本属于文本节点,如 `&lt;year&gt;2005&lt;/year&gt;` 中的 &quot;2005&quot; 是单独的文本节点,不是元素的值。
|
3天前
|
XML Web App开发 JavaScript
XML DOM - 导航节点
在XML DOM中,导航节点涉及利用parentNode、childNodes、firstChild、lastChild、nextSibling和previousSibling属性来遍历节点树。不同浏览器对空文本节点处理不一致,可能导致导航问题。为解决此问题,可以使用get_nextSibling函数,它检查并跳过非元素类型的空文本节点,确保在IE和Firefox等浏览器中得到一致的结果。该函数循环遍历直到找到下一个元素节点。
|
3天前
|
XML JavaScript 前端开发
XML DOM 遍历节点树
该示例展示了如何遍历XML文档的节点树。通过DOMParser解析XML字符串得到xmlDoc,然后遍历根节点的子节点,显示每个节点的名称及其文本值。输出结果为:&quot;title: Everyday Italian&quot;, &quot;author: Giada De Laurentiis&quot;, &quot;year: 2005&quot;。代码使用JavaScript实现,循环遍历并更新HTML元素`&lt;p id=&quot;demo&quot;&gt;&lt;/p&gt;`的内容。