C#操作Xml文件:增,删,改,查

新建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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,三层架构是一种软件设计模式,它将应用程序分为三个主要层次:表示层、业务逻辑层和数据访问层。在这个问题中,我们可以使用三层架构来实现启动密码的管理操作。 下面是使用 C# 实现启动密码的管理操作的代码示例: 1. 表示层(Presentation Layer) 表示层主要负责与用户交互,包括显示界面、处理用户输入等。在这个问题中,我们可以使用 Windows 窗体应用程序作为表示层。 2. 业务逻辑层(Business Logic Layer) 业务逻辑层主要负责处理应用程序的业务逻辑,包括验证用户输入、处理数据等。在这个问题中,我们可以定义一个名为 PasswordManager 的类,用于管理启动密码的增删改查操作。 ```csharp public class PasswordManager { public bool AddPassword(string password) { // 处理添加密码的逻辑 } public bool DeletePassword(string password) { // 处理除密码的逻辑 } public bool UpdatePassword(string oldPassword, string newPassword) { // 处理更新密码的逻辑 } public string GetPassword() { // 处理获取密码的逻辑 } } ``` 3. 数据访问层(Data Access Layer) 数据访问层主要负责与数据存储层交互,包括读取、写入数据等。在这个问题中,我们可以使用文件存储密码。 ```csharp public class PasswordFile { private string filePath; public PasswordFile(string filePath) { this.filePath = filePath; } public bool WritePassword(string password) { // 将密码写入文件 } public string ReadPassword() { // 从文件中读取密码 } } ``` 在实现启动密码的管理操作时,我们可以将 PasswordManager 类和 PasswordFile 类结合起来使用,如下所示: ```csharp public class PasswordManager { private PasswordFile passwordFile; public PasswordManager(string filePath) { passwordFile = new PasswordFile(filePath); } public bool AddPassword(string password) { // 处理添加密码的逻辑 return passwordFile.WritePassword(password); } public bool DeletePassword(string password) { // 处理除密码的逻辑 return passwordFile.WritePassword(""); } public bool UpdatePassword(string oldPassword, string newPassword) { // 处理更新密码的逻辑 string password = passwordFile.ReadPassword(); if (password == oldPassword) { return passwordFile.WritePassword(newPassword); } else { return false; } } public string GetPassword() { // 处理获取密码的逻辑 return passwordFile.ReadPassword(); } } ``` 最后,在表示层中,我们可以创建一个窗体,在窗体中添加文本框、按钮等控件,用于用户输入密码和进行密码管理操作。 这就是使用三层架构实现启动密码的管理操作的基本思路和代码示例。希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值