首页 > 编程语言 >递归及如何用c#递归生成多层次XML文件

递归及如何用c#递归生成多层次XML文件

时间:2023-05-12 18:32:45浏览次数:29  
标签:XML 递归 c# parentcode xd xe dt dr


递归

递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象.递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰.。

一般定义
程序调用自身的编程技巧称为递归( recursion)。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

递归应用

递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
递归的缺点:
递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。
递归次数过多容易造成栈溢出等。


protected void Button1_Click(object sender, EventArgs e)
    {
        SqlDataAdapter da = new SqlDataAdapter("select * from [table]", ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString);
        DataTable dt = new DataTable("tab1");
        da.Fill(dt);
        XmlDocument xd = new XmlDocument();
        XmlDeclaration xdl = xd.CreateXmlDeclaration("1.0", "utf-8", null);
        xd.AppendChild(xdl);
        XmlElement xe = xd.CreateElement("root");
        xe = XmlElementCreate(dt,"",xd,xe);
        xd.AppendChild(xe);
        try
        {
            xd.Save("D://XMLCerate.xml");
            Response.Write("OK");
        }
        catch (Exception ee)
        { 
            Response.Write(ee.Message);
        }
    }

    private XmlElement XmlElementCreate(DataTable dt, string parentcode, XmlDocument xd, XmlElement xee)
    {
        string strparentcode="";
        if (parentcode.Trim().Length == 0)
            strparentcode = "parentcode is null";
        else
            strparentcode = "parentcode='" + parentcode + "'";
        DataRow[] dr = dt.Select(strparentcode);
        for (int i = 0; i < dr.Length; i++)
        {
            XmlElement xe = xd.CreateElement("c" + dr[i]["code"].ToString().Replace(".", ""));
            XmlAttribute xaCode = xd.CreateAttribute("code");
            xaCode.Value = dr[i]["code"].ToString();
            xe.Attributes.Append(xaCode);
            XmlAttribute xaName = xd.CreateAttribute("name");
            xaName.Value = dr[i]["name"].ToString();
            xe.Attributes.Append(xaName);
            xe = XmlElementCreate(dt, dr[i]["code"].ToString(), xd, xe);
            xee.AppendChild(xe);
        }
        return xee;
    }

标签:XML,递归,c#,parentcode,xd,xe,dt,dr
From: https://blog.51cto.com/dupeng0811/6271669

相关文章

  • Docker 安装 Tomcat
    方法一、dockerpulltomcat查找DockerHub上的tomcat镜像runoob@runoob:~/tomcat$dockersearchtomcatNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDtomcatApacheTomcatisanopensou......
  • C++ 模板
    模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量 ,我们可以定义许多不同类型的向量,比如 vector<int> 或......
  • Docker 安装 Redis
    方法一、dockerpullredis:3.2查找DockerHub上的redis镜像runoob@runoob:~/redis$dockersearchredisNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDredisRedisisanopensource...2321[OK]sa......
  • FreeCodeCamp-通过创建杂志学习 CSS 网格布局
    index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Magazine&......
  • 在python3.7+中优雅的使用dataclass
    [本文出自天外归云的博客园]在Python3.7+中,dataclasses是一个非常优雅的工具,可以轻松地创建简单的类,并自动生成常见的类方法,比如 __init__、__repr__ 等。以下是一些使用dataclasses时需要注意的事项:导入dataclasses模块在使用dataclasses之前,需要先导入datacla......
  • ES6-class类
    类的声明方式1.声明式classA{}2.匿名表达式constA=class{}3.命名表达式,A可以外部访问,A2只能在内部访问constA=classA2{}4.立即执行constA=newclass{constructor(aName){this.aName=aName}sayName(){returnconsole.log(this.aName......
  • 1011 World Cup Betting
    Withthe2010FIFAWorldCuprunning,footballfanstheworldoverwerebecomingincreasinglyexcitedasthebestplayersfromthebestteamsdoingbattlesfortheWorldCuptrophyinSouthAfrica.Similarly,footballbettingfanswereputtingtheirmoney......
  • AI孙燕姿唱《安河桥》(这些翻唱作品基于一个叫做so-vits-svc的开源项目)
    在B站上,AI孙燕姿翻唱的林俊杰《她说》、周董《爱在西元前》、赵雷《成都》等等,让一众网友深陷无法自拔。网友表示,听了一晚上AI孙燕姿,出不去了......这些翻唱作品基于一个叫做so-vits-svc的开源项目。仅凭数段音频,就可用一个生成式模型来合成目标音色的音频,训练出用户想要的声学......
  • c++打卡练习(26)
    水仙花数:一个三位数,每个位上的数的三次方的和等于这个数本身,那么他就是水仙花数流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ intbai,shi,ge,i,j=0; for(i=100;i<1000;i++){ bai=i/100; shi=(i-bai*100)/10; ge=i-bai*100-shi*10; if(i==bai*ba......
  • C/C++思考:命令模式在控制中的应用
    目录意义问题用命令模式解决电机控制与输入信号耦合问题与标准命令模式的区别异同意义先说结论:命令模式能有效对代码模块进行解耦,增强模块的扩展性以及可移植性。问题为了方便说明问题,假设现在有一个电机Motor,在识别到外界信号后,通过软件控制其旋转。需要支持的旋转方式为3种:......