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

1 0
原创粉丝点击