博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件读写xml 多层次
阅读量:6330 次
发布时间:2019-06-22

本文共 7613 字,大约阅读时间需要 25 分钟。

 以前记得用过xml当数据源,觉得很方便,因为有时候,为了演示数据绑定的时候,连接数据库太麻烦,不是每个人,都会去安装一个sqlserver,然后就是配置文件等等,太麻烦

先看xml数据结构   

电影院1
成功的道路上1
成功说1
mulberry1
成功说2
mulberry2
电影院2
成功的道路上2
成功说2
leaf1
成功说
leaf2

要展示的效果为 

  

   这个是 Winform程序  电影列表 

展示是放在 TreeView 树形图里面的,下面是代码

 

using System.xml;         private void button1_Click(object sender, EventArgs e)        {            TreeNode tn2, tn3,tn3_2,tn3_3,tn3_4;            XmlDataDocument Xd = new XmlDataDocument();            Xd.Load("..\\..\\XMLFile1.xml");            XmlNode rootNode = Xd.DocumentElement;            foreach (XmlNode xn1 in rootNode.ChildNodes)            {                foreach (XmlNode xn2 in xn1.ChildNodes)                {                    if (xn2.Name=="name")                    {                        tn2 = treeView1.Nodes.Add(xn2.InnerText);                    }                    if (xn2.Name=="address")                    {                        tn2.Nodes.Add(xn2.InnerText);                        tn3 = tn2.Nodes.Add("电影列表");//自定义节点                    }                    if (xn2.Name=="movie")                    {                        foreach (XmlNode xn3 in xn2.ChildNodes)                        {                                                        if (xn3.Name=="name")                            {                                                                tn3_2 = tn3.Nodes.Add(xn3.InnerText); //显示在 自定义节点下                            }                            if (xn3.Name=="actor")                            {                                tn3_3 = tn3_2.Nodes.Add("演员表");                                tn3_3.Nodes.Add(xn3.InnerText);                            }                            if (xn3.Name=="time")                            {                                tn3_4 = tn3_2.Nodes.Add("放映时间");                                tn3_4.Nodes.Add(xn3.InnerText);                            }                        }                    }                }            }        }

自定义节点,自己 想怎么显示都行,好像就是有点麻烦,多层结构,要是有无限层,或许要用到递归

 

之前还真的而遇到了 要有递归去遍历的情况,那是数据库设计方面的,有关无限极数据库设计,用的是二叉树结构, 左右值 的概念,相关文档

下面是 遍历的代码(WEB),那个表的结构 主键是用的GUID,因为是 有很多级,所有考虑用左右值得方法设计

public partial class zuoyou : System.Web.UI.Page    {        //guidzz=29be94e8-62d4-497e-bb10-1587455c2fb6        string conStr = ConfigurationManager.ConnectionStrings["New_sy_coreConnectionString"].ConnectionString;        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                Bind();                if (Request.QueryString["guidzz"]!=null)                {                    getAllMessByGUIDzz(Request.QueryString["guidzz"].ToString());                }            }        }        ///         /// guidzz 得到站点的guid 有几个站点就有几个GUID        ///         public void Bind()        {            //显示下面的所有的信息            //首先显示一下站点的信息            using (DataClasses1DataContext dc = new DataClasses1DataContext(conStr))            {                dc.Connection.Open();                string sql = "select Top(5) GUID ,Name from Warehouse";                SqlCommand com = new SqlCommand(sql, dc.Connection as SqlConnection);                using (SqlDataReader reader = com.ExecuteReader())                {                    this.rep_1.DataSource = dc.Translate
(reader).ToList(); this.rep_1.DataBind(); } } } //再根据得到的guid 得到这个站点下面的所有的节点信息 public void getAllMessByGUIDzz(string guidzz) { //得到了站点的根目录的ID using (DataClasses1DataContext dc = new DataClasses1DataContext(conStr)) { dc.Connection.Open(); string sql = "select * from Catalog_ViewGetLoadByList where Left_Id=1 and Warehouse_Id='" + guidzz + "' order by ShowOrder"; SqlCommand com = new SqlCommand(sql, dc.Connection as SqlConnection); using (SqlDataReader reader = com.ExecuteReader()) { //得到该站点下面的所有分类 通过左右值确定下来 List
list= dc.Translate
(reader).ToList(); //先创建树的根节点然后一个一个的去创建 //然后绑定啊 foreach (Catalog_ViewGetLoadByList item in list) { TreeNode tn1 = new TreeNode(jiequString(item.Name),item.GUID); Tree_tv.Nodes.Add(tn1); getRes(tn1, dc); } } } } public string jiequString(string str) { return str.Length > 5 ? str.Substring(0, 5)+"..." : str; } protected void Tree_tv_SelectedNodeChanged(object sender, EventArgs e) { TreeNode tn1 = this.Tree_tv.SelectedNode;//得到当前点击的节点 //查看当前节点的属性 getaa(tn1.Value); } ///
/// 递归 查看下面的子节点 /// ///
///
private void getRes(TreeNode tn1, DataClasses1DataContext dc) { string sql = "select * from Catalog_ViewGetLoadByList where Parent_Id='" + tn1.Value + "' order by ShowOrder"; SqlCommand com = new SqlCommand(sql, dc.Connection as SqlConnection); using (SqlDataReader reader = com.ExecuteReader()) { List
list = dc.Translate
(reader).ToList(); //先创建树的根节点然后一个一个的去创建 //然后绑定啊 foreach (Catalog_ViewGetLoadByList item in list) { TreeNode tn2 = new TreeNode(jiequString(item.Name), item.GUID); tn1.ChildNodes.Add(tn2); //再去判断这个节点是不是有子节点 getRes( tn2, dc);//看清楚了,这里是递归调用的 } } } // getaa("2748bb6d-2d7d-4c62-ad3b-3a667badadf1"); //得到编号以后 查看属性 public void getaa(string guid) { //补充 查看上级目录的属性 一起放在文件的列表中 using (DataClasses1DataContext dc = new DataClasses1DataContext(conStr)) { dc.Connection.Open(); string sql = string.Format("select * from dbo.Album_Fled where Album_Id in(select Album_Id from Catalog_Album where Catalog_Id in ('{0}'))", guid); SqlCommand com = new SqlCommand(sql, dc.Connection as SqlConnection); using (SqlDataReader reader = com.ExecuteReader()) { List
list = dc.Translate
(reader).ToList(); this.rep_album.DataSource = list; this.rep_album.DataBind(); } } } }

 

------------总结------------------------------------------

xml的简单读取,有关于 xml的操作,除了读,当然还有 增 删 改.详细的,去查下文档吧.

另外一个涉及到的就是 数据库的设计;当有很多级的时候,比如物种的分类:界,门,纲,目,科,属,种,

或者是,地区的分级 地球.国家.省.市.街道.村,队,户.人..   一种解决的办法是 用内联 ,有新的朋友,可以自己去比较一下

最后就是 有关 递归 的思想,遍历二叉树形图的时候,用递归很方便.你要是想用for循环来做....除非你知道,他有多少层....

呵呵,大家一起探讨下,有关于这个 二叉树树形图 吧,数据结构里面从链表 到树形图,相信树形图的应用应该是非常丰富的.

 

 

 

转载于:https://www.cnblogs.com/limiao/archive/2012/07/11/2586972.html

你可能感兴趣的文章
HDU 1255 覆盖的面积(矩形面积交)
查看>>
Combinations
查看>>
SQL数据库无法附加,提示 MDF" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。...
查看>>
第二十一章流 3用cin输入
查看>>
在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。...
查看>>
获取SQL数据库中的数据库名、所有表名、所有字段名、列描述
查看>>
Orchard 视频资料
查看>>
简述:预处理、编译、汇编、链接
查看>>
调试网页PAIP HTML的调试与分析工具
查看>>
路径工程OpenCV依赖文件路径自动添加方法
查看>>
玩转SSRS第七篇---报表订阅
查看>>
WinCE API
查看>>
POJ 3280 Cheapest Palindrome(DP 回文变形)
查看>>
oracle修改内存使用和性能调节,SGA
查看>>
SQL语言基础
查看>>
对事件处理的错误使用
查看>>
最大熵模型(二)朗格朗日函数
查看>>
深入了解setInterval方法
查看>>
html img Src base64 图片显示
查看>>
[Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction...
查看>>