博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 关于XML的简单操作实例
阅读量:7013 次
发布时间:2019-06-28

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

这个例子是基本我个人应用的实例。

背景:有个xml文件需要在管理模块实现维护(增删改)|asp.net|web系统

维护页面是个GridView形式的。

1、以下是XML文件样例

北京
116.392129
39.90071
上海
121.436573
31.183314

 

2、读取XML文件返回DataTable类型的方法

///         /// 读取XML文件        ///         /// 
protected DataTable GetDt() { XmlDocument myDocument = new XmlDocument(); myDocument.Load(Server.MapPath("~/index/city.xml"));//XML文件在项目的某个目录里 using (XmlNodeReader reader = new XmlNodeReader(myDocument)) { DataSet dataSetXml = new DataSet(); dataSetXml.ReadXml(reader); DataTable dataTableXml = dataSetXml.Tables[0]; return dataTableXml; } }

说明:返回以后绑定到GridView中,需要注意的是,这个方法默认获取到的列是XML文件样例中number标签的"id"属性、name、Longitude、Latitude、templateid里的文本内容。

3、向XML文件添加节点保存的方法

///         /// 添加节点        ///         protected void Add()        {            int id = int.Parse(hf.Value) + 1;//hf是记录xml文件中当前number的最大id的,新添一个节点id就要加1            XmlDocument xmlDoc = new XmlDocument();            xmlDoc.Load(Server.MapPath("~/index/city.xml"));            XmlNode root = xmlDoc.SelectSingleNode("earth");//查找
XmlElement xe1 = xmlDoc.CreateElement("number");//创建一个
节点 xe1.SetAttribute("id", id.ToString());//设置该节点id属性 XmlElement xesub1 = xmlDoc.CreateElement("name"); xesub1.InnerText = txt_name.Text;//设置文本节点 xe1.AppendChild(xesub1);//添加到
节点中 XmlElement xesub2 = xmlDoc.CreateElement("Longitude"); xesub2.InnerText = txt_Longitude.Text; xe1.AppendChild(xesub2); XmlElement xesub3 = xmlDoc.CreateElement("Latitude"); xesub3.InnerText = txt_Latitude.Text; xe1.AppendChild(xesub3); XmlElement xesub4 = xmlDoc.CreateElement("templateid"); xesub4.InnerText = ""; xe1.AppendChild(xesub4); root.AppendChild(xe1);//添加到
节点中 xmlDoc.Save(Server.MapPath("~/index/city.xml"));//保存到xml文件中 }

说明:需要说明一点,当前创建的xml文件可能不允许读写操作,这时就要设置权限,可以给xml文件所在的文件夹加Everone权限,或者在文件夹右键-属性-常规,把只读前的小对勾去掉-确定。

4、修改XML文件中节点的方法

///         /// 修改节点        ///         protected void Mod()        {            string id = hfid.Value;//一个常量保存了number标签的id属性            XmlDocument xmlDoc = new XmlDocument();            xmlDoc.Load(Server.MapPath("~/index/city.xml"));            XmlNodeList nodeList = xmlDoc.SelectSingleNode("earth").ChildNodes;            foreach (XmlNode xn in nodeList)//遍历所有子节点            {                XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型                if (xe.GetAttribute("id") == id)//如果id属性值                {                    XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点                    foreach (XmlNode xn1 in nls)//遍历                    {                        XmlElement xe2 = (XmlElement)xn1;//转换类型                        if (xe2.Name == "name")//如果找到                        {                            xe2.InnerText =txt_name.Text;                            continue;                        }                        if (xe2.Name == "Longitude")                        {                            xe2.InnerText =txt_Longitude.Text;                            continue;                        }                        if (xe2.Name == "Latitude")                        {                            xe2.InnerText =txt_Latitude.Text;                            break;//要修改的属性修改完则退出                        }                    }                    break;                }            }            xmlDoc.Save(Server.MapPath("~/index/city.xml"));        }

说明:我在这里是通过number节点的id属性来唯一标示节点的,这个无所谓,可以举一反三的,只要能找到节点即可修改之,这只是个简单例子,可以根据实际情况变换。

5、删除XML文件中的节点方法

///         /// 删除节点     ///         /// 节点名称        protected void Del(string name)        {            XmlDocument xmlDoc = new XmlDocument();            xmlDoc.Load(Server.MapPath("~/index/city.xml"));            XmlNodeList xnl = xmlDoc.SelectNodes("earth/number");            foreach (XmlNode xn in xnl)            {                XmlElement xe = (XmlElement)xn.SelectSingleNode("name");                if (xe != null && xe.InnerText == name)                {                    xn.ParentNode.RemoveChild(xn);//删除name节点所在父节点即整个number节点                }            }            xmlDoc.Save(Server.MapPath("~/index/city.xml"));        }

说明:在这里需要传值,是一个子节点name的文本内容,根据它确定它所在的number父节点,然后将这个number父节点删除。暂时没想到别的更好的方法,如果你有更好的方法,欢迎回帖交流。

好了,暂时到这。简单的例子,欢迎深入交流。

转载于:https://www.cnblogs.com/smilences/archive/2012/06/27/XML%e6%96%87%e4%bb%b6%e6%93%8d%e4%bd%9cxml%e6%96%87%e4%bb%b6xml%e6%96%87%e4%bb%b6%e8%af%bb%e5%86%99.html

你可能感兴趣的文章
vuejs2.0子组件改变父组件的数据
查看>>
P1019 单词接龙
查看>>
git的版本回退探索
查看>>
H3c 配置ssh acl
查看>>
Dedecms判断当前栏目下是否有子栏目
查看>>
【PIC学习第2例】PIC16F877A LED闪烁
查看>>
SQL2005中时,Diagrams的问题
查看>>
拨云见日,任重道远 ——第六届云计算大会感悟
查看>>
CentOS VMware 下SSH配置方法详解
查看>>
PHP错误级别 error_reporting() 函数详解
查看>>
WIndows 使用VS编译 Lua5
查看>>
什么是“单播”“组播”和“多播”
查看>>
flex---->图表控件
查看>>
分析函数调用关系图(call graph)的几种方法
查看>>
11.0592M晶振与12M晶振
查看>>
A380上11万一张的机票什么享受?来看看
查看>>
ubuntu15.10下编译安装wine1.8 rc4
查看>>
jquery获取节点的时候获取包含自己在内的HTML标签
查看>>
CPU profiling
查看>>
Exchanging Partitions and Subpartitions with Tables--官方文档
查看>>