C#操作Xml文件:增,删,改,查
来源:互联网 发布:linux断点续传工具 编辑:程序博客网 时间:2024/06/12 20:00
新建xml文件–AccountDB.xml
使用xml文件存储页面数据,用与用户登录和用户账号列表的展示
<?xml version="1.0" encoding="utf-8"?><Root> <LoginAccount> <Column Name="test" UserGuid="db7e1daa02d17325"> <UserGuid>db7e1daa02d17325</UserGuid> <UserName>test</UserName> <NickName>张三</NickName> <PassWord>c4ca4238a0b923820dcc509a6f75849b</PassWord> </Column> <Column Name="admin" UserGuid="dd2d47215257c963"> <UserGuid>dd2d47215257c963</UserGuid> <UserName>admin</UserName> <NickName>1</NickName> <PassWord>c4ca4238a0b923820dcc509a6f75849b</PassWord> </Column> </LoginAccount> <AccountList> <Column UserGuid="db7e1daa02d17325" AccountID="11"> <AccountGuid>11</AccountGuid> <ProductName>360</ProductName> <AccountNumber>asasasa</AccountNumber> <PassWord>1111</PassWord> </Column> <Column UserGuid="db7e1daa02d17325" AccountID="22"> <AccountGuid>22</AccountGuid> <ProductName>sina</ProductName> <AccountNumber>saewewew</AccountNumber> <PassWord>1111</PassWord> </Column> <Column UserGuid="db7e1daa02d17325" AccountID="333"> <AccountGuid>333</AccountGuid> <ProductName>csdn</ProductName> <AccountNumber>fdfdfdfd</AccountNumber> <PassWord>2222</PassWord> </Column> <Column UserGuid="db7e1daa02d17325" AccountID="4444"> <AccountGuid>4444</AccountGuid> <ProductName>baidu</ProductName> <AccountNumber>1111</AccountNumber> <PassWord>1111</PassWord> </Column> </AccountList></Root>
新建完成xml文件以后,设置好自定义的格式,xml文件的节点名字可以自定义设置,这是xml文件的优点
在用户登录页面需要查询xml 文件内部用户的值
在获取xml文件之前先获取xml文件的路径,方便读取文件
在web页面读取xml文件路径方法
private static string FilePath = HttpRuntime.AppDomainAppPath + @"AccountDB.xml";
在win窗体程序读取xml文件路径方法
public static string GetFilePath(){ DirectoryInfo dir = new DirectoryInfo(Application.StartupPath).Parent.Parent; string filePath = dir.FullName + "/AccountDB.xml"; return filePath;}dir.FullName获取的是当前站点的路径
需要添加using System.IO;引用
在操作xml文件内部的数据时,往往直接在xml内部读取数据比较麻烦,现在我们可以将xml文件内部的数据直接转存在自定义的DataTable内,在C#中,操作DataTable往往比xml快的多(个人观点)
在读取上面的AccountDB.xml文件,可以将读取出两张表,我这边只读出用户登录表
在将xml文件数据转换成DataTable之前,我们需要将xml文件中要转换的部分读取出来(不废话,直接贴代码)
//获取当前需要转换的XML Public string GetXmlStr(){ XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(GetFilePath());//这里的GetFilePath()是获取当前xml文件的路径我这里是在win窗体程序内应用 web端可以直接调用FilePath string xmlstr = xmldoc.InnerXml; int startnum = xmlstr.IndexOf(@"<LoginAccount>"); int endnum = xmlstr.IndexOf(@"</LoginAccount>"); xmlstr = xmlstr.Substring(startnum, endnum - startnum + 15);//数字15代表</LoginAccount>的长度 return xmlstr ;}
获取到需要转换的xml文件以后,直接将xml文件数据转换成DataTable(这里可以返回DataSet,根据自己的需要)
public static DataTable GetLoginList() { DataSet xmlDS = new DataSet(); StringReader stream = null; XmlTextReader reader = null; try { string xmlstr = GetXmlStr(); stream = new StringReader(xmlstr); reader = new XmlTextReader(stream); xmlDS.ReadXml(reader); } catch (Exception ex) { string strTest = ex.Message; return null; } finally { if (reader != null) reader.Close(); } return xmlDS.Tables[0]; }
在将数据转换成表以后,在登录中只需要在转换出的表中查找就可以了
Public bool Login(string username,string pwd){ bool bl=false; DataTable dt=GetLoginList(); DataRow[] daArr=dt.Select("UserName='"+username+"' AND PassWord='"+pwd.MD5EnCode();+"' "); DataTable account=new DataTable(); account=dt.Copy(); account.Row.Clear(); if(daArr.Length>0) { for (int i = 0; i < daArr.Length; i++) { account.ImportRow(daArr[i]); } } bl=account.Rows.Count>0; return bl;}
上面说到对xml文件的读取,用户登录完成以后一般新用户也是需要注册滴,在注册新用户时需要在xml写入新的数据,按照xml文件格式插入相应的数据节点
在写入时一样需要读取到当前xml文件并且找到节点,并且在该节点下插入数据节点,直接奉上代码以供参考(不喜勿喷)
public void RegisterAccount(string username,string nickname,string pwd){ string xmlurl=GetFilePath(); XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(xmlurl); XmlNode root = xmldoc.SelectSingleNode("Root");//查找<Root>节点 XmlNode loginaccount = root.SelectSingleNode("LoginAccount"); //查找<LoginAccount>节点 XmlElement col = xmldoc.CreateElement("Column");//创建一个<Column>节点 col.SetAttribute("Name", username); string guid="";//主键Guid自动生成,这里可根据用户需要设置(获取Guid方法可以私信我) XmlElement userguid = xmldoc.CreateElement("UserGuid"); //创建<UserGuid>子节点 userguid.InnerText = guid; //设置节点值 col.AppendChild(userguid);//添加到<Column>节点 XmlElement name = xmldoc.CreateElement("UserName"); //创建<UserName>子节点 name.InnerText = username; //设置节点值 col.AppendChild(name);//添加到<Column>节点 XmlElement nick = xmldoc.CreateElement("NickName"); //创建<NickName>子节点 nick.InnerText = nickname; //设置节点值 col.AppendChild(nick);//添加到<Column>节点 XmlElement password = xmldoc.CreateElement("PassWord"); //创建<PassWord>子节点 password.InnerText = pwd.MD5EnCode(); //设置节点值 col.AppendChild(password);//添加到<Column>节点 loginaccount.AppendChild(col); //将<Column>节点添加到<LoginAccount>节点 xmldoc.Save(xmlurl);//保存当前xml文件}
在插入数据之前可以添加一个小方法,验证当前添加的数据是否存在
public bool CheckUser(string username) { bool bl = true; XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(WinHelp.GetFilePath()); XmlNode root = xmldoc.SelectSingleNode("Root");//查找<Root>节点 XmlNode loginaccount = root.SelectSingleNode("LoginAccount"); //查找<LoginAccount>节点 XmlNodeList columnlist = loginaccount.SelectNodes("Column"); foreach (XmlNode colunm in columnlist) { XmlElement xm = (XmlElement)colunm; if (xm.GetAttribute("Name") == username) { bl = false; } } return bl; }
在用户修改密码时需要对当前用户数据在xml里面进行修改,就需要对Xml文件进行操作
这里演示用户修改密码
public void UpdateAccount(string oldpwd,string newpwd,string accountguid) { string xmlurl=GetFilePath(); XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(xmlurl); XmlNode root = xmldoc.SelectSingleNode("Root");//查找<Root>节点 XmlNode loginaccount = root.SelectSingleNode("LoginAccount"); //查找<LoginAccount>节点 XmlNodeList columnlist = loginaccount.SelectNodes("Column"); foreach (XmlNode colunm in columnlist) { XmlElement xm = (XmlElement)colunm; if (xm.GetAttribute("UserGuid") == accountguid) { XmlNodeList conxm = xm.ChildNodes; foreach (XmlNode item in conxm) { XmlElement itxe = (XmlElement)item; string name = itxe.Name; if(name=="PassWord") { if(itxe.InnerText==old.MD5EnCode()) { itxe.InnerText = newpwd.MD5EnCode(); } } } } } xmldoc.Save(xmlurl); }
在用户管理时,系统管理员可以将指定的用户删除,这就需要对xml节点进行删除,删除xml节点并保存
private void DelAccount(string accountguid) { string xmlurl = GetFilePath(); XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(xmlurl); XmlNode root = xmldoc.SelectSingleNode("Root");//查找<Root>节点 XmlNode loginaccount = root.SelectSingleNode("LoginAccount"); //查找<LoginAccount>节点 XmlNodeList columnlist = loginaccount.SelectNodes("Column"); foreach (XmlNode colunm in columnlist) { XmlElement xm = (XmlElement)colunm; if (xm.GetAttribute("UserGuid") == accountguid) { XmlElement colxml = (XmlElement)loginaccount; colxml.RemoveChild(colunm);//移除掉<LoginAccount>节点下指定的子节点 } } xmldoc.Save(xmlurl); }
上面在用户登录,用户注册 ,密码修改,用户管理等各使用到的是对xml文件的查询,新增 ,修改,删除,等基本操作,以上代码个人亲测通过,基本上是copy以后可以直接使用,如有疑问可以私信我,不喜勿喷,
源代码已上传,有需要可以下载http://download.csdn.net/detail/shechaojin/9502916
- C#操作xml文件(增、删、改、查)
- C#操作Xml文件:增,删,改,查
- C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- c# 操作 XML(增 ,删 , 改 , 查)
- C# 实现对XML的基本操作(创建xml文件,增、删、改、查 xml节点信息)
- C# XML文件的一些操作,增删改查
- XML增/删、改、查简单操作
- C#程序:如何创建xml文件以及xml文件的增、删、改、查
- C#操作Xml(增删改查)练习
- C#操作XML增删改查
- C#中如何创建xml文件 增、删、改、查 xml节点信息
- LightOJ 1138 Trailing Zeroes (III)
- Materials Design修改TextInputLayout的label字体颜色和下划线的状态颜色
- epoll详解
- POJ 2891-Strange Way to Express Integers【中国剩余定理】
- 在 iOS创建 第一个Cordova 项目
- C#操作Xml文件:增,删,改,查
- android学习 4-25使用Path 绘制几何图形
- hdu-1140 War on Weather(基础三维几何)
- C#事件(event)的一个实例
- 整理iOS9适配中出现的坑(图文)
- Android MVP架构,android-architecture
- 数组实现循环队列 C++实现
- springmvc(一)快速入门(传统版)
- RabbitMQ学习之Java客户端连接测试(二)