• xml文件,xml格式字符串 读写


    最近工作需要写一个小工具,对会员卡卡号进行修改,需要修改的会员卡号存放在excel中,其中有id,正确卡号,当前错误卡号,状态    4列,为了不让用户随意修改excel内容,需要将excel转化为xml,然后对xml进行加密,在程序中读取xml内容,放到字符串中,进行解密,然后在读卡后,查找xml是否有对应的错误卡号,如果有将卡号修改为正确卡号,然后修改成功后需要将这张卡的状态置为已修改。

    /// <summary>
            /// 使用NPOI读取excel,将数据放到新创建的xml中
            /// </summary>
            /// <param name="filePath">excel路径</param>
            private void ExportExcel(string filePath)
            {
                XmlDocument doc = new XmlDocument();
                XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                doc.AppendChild(dec);
                //创建一个根节点
                XmlElement root = doc.CreateElement("CardsInfo");
                doc.AppendChild(root);
                IWorkbook wk = null;
                string extension = System.IO.Path.GetExtension(filePath);//获取扩展名
                try
                {
                    FileStream fs = File.OpenRead(filePath);
                    //if(extension.Equals)
                    if (extension.Equals(".xls"))
                    {
                        //把xls文件中的数据写入wk中
                        wk = new HSSFWorkbook(fs);
                    }
                    fs.Close();
                    ISheet sheet = wk.GetSheetAt(0);
                    IRow row = sheet.GetRow(1);//获取当前行数据
                    for (int i = 2; i <= sheet.LastRowNum; i++)
                    {
                        row = sheet.GetRow(i);  //读取当前行数据
                        if (row != null)
                        {
                            //LastCellNum 是当前行的总列数
                            XmlElement node = doc.CreateElement("Card");
                            node.SetAttribute("ID", row.GetCell(0).ToString());
                            node.SetAttribute("CorrectCardNum", row.GetCell(1).ToString());
                            node.SetAttribute("ErrorCardNum", row.GetCell(2).ToString());
                            node.SetAttribute("Satus", "");
                            root.AppendChild(node);
     
                        }
                    }
                    doc.Save("bb.xml");
                    Console.Write(doc.OuterXml);
     
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
     
                }
     
            }
     bb.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <CardsInfo>
    <Card ID="1" CorrectCardNum="201603011" ErrorCardNum="20163011" Satus="" />
    <Card ID="2" CorrectCardNum="201603012" ErrorCardNum="20163012" Satus="" />

    ......

    </CardsInfo>

    //现在的bb.xml是明文的,为了安全,需要对其加密,使用AES加密
       /// <summary>
            /// 将xml转化为字符串,然后进行AES加密,存到aes.xml中
            /// </summary>
            private void xmlToString()
            {
                XmlDocument xdoc = new XmlDocument();
                xdoc.Load("bb.xml");//加载xml文件
                string aesCardInfo=AES.Encrypt(xdoc.InnerXml);将内容进行加密
                FileStream fs = new FileStream("aes.xml", FileMode.Append);
                StreamWriter sw = new StreamWriter(fs);
                sw.Write(aesCardInfo);
                sw.Flush();
                sw.Close();
            }

    到目前为止,我们用的aes.xml是乱码的,用户不知道这个文件xml存了什么,相对安全

    //下面是读取aes.xml,解密,将信息存到list,并展示到datagridview中

    /// <summary>
    /// 将xml解密,并将信息存放到list,且展示在gridview List<CardInfo>
    /// </summary>
    private void decryptionXml()
    {
    List<CardInfo> cardInfoList = new List<CardInfo>();
    XmlDocument xdoc = new XmlDocument();
    XmlNodeList xnlist = explainXmlStr(ref xdoc);
    foreach (XmlNode xn in xnlist)
    {

    CardInfo ci = new CardInfo();
    XmlElement xe = (XmlElement)xn;
    ci.ID = xe.GetAttribute("ID").ToString();
    ci.CorrectCardNum = xe.GetAttribute("CorrectCardNum").ToString();
    ci.ErrorCardNum = xe.GetAttribute("ErrorCardNum").ToString();
    ci.Satus = xe.GetAttribute("Satus").ToString() == "" ? "未修正" : "已修正";
    cardInfoList.Add(ci);
    }
    dataGridView_card.DataSource = cardInfoList;

    dataGridView_card.Columns[0].HeaderText = "ID";
    dataGridView_card.Columns[1].HeaderText = "正确卡号";
    dataGridView_card.Columns[2].HeaderText = "错误卡号";
    dataGridView_card.Columns[3].HeaderText = "状态";
    }

    /// <summary>
    /// 读取加密的xml,解密,解析成XmlNodeList
    /// </summary>
    /// <returns></returns>
    private XmlNodeList explainXmlStr(ref XmlDocument xdoc)
    {
    string content = File.ReadAllText(dir).ToString();//读取xml文件内容
    string AESDecryptStr = AES.AESDecrypt(content);//xml解密后字符串
    xdoc = new XmlDocument();
    xdoc.LoadXml(AESDecryptStr);
    XmlNode xnode = xdoc.SelectSingleNode("CardsInfo");
    XmlNodeList xnlist = xnode.ChildNodes;
    return xnlist;
    }

     //修改xml 中某节点信息,保存

    private void modify()

    {

    XmlDocument xml = new XmlDocument();
    XmlNodeList xnlist = explainXmlStr(ref xml);

    foreach (XmlNode xn in xnlist)
    {
    XmlElement xe = (XmlElement)xn;

    if (xe.GetAttribute("ErrorCardNum").ToString()==CardNum) //查到对应节点
    {

    if (cardID.Write(xe.GetAttribute("CorrectCardNum").ToString()))//修改会员卡卡号
    {

    xe.SetAttribute("Satus","已修改");//将xml对应节点的状态修改为已修改

    SaveXmlStr(xml);

    WriteLog(filename, CardNum, "Success");//记录日志

    }

    /// <summary>
    /// 保存修改后的xml对象
    /// </summary>
    /// <param name="xd"></param>
    private void SaveXmlStr(XmlDocument xd)
    {
    string xmlStr = xd.InnerXml.ToString();//xml内容
    string aesCardInfo = AES.Encrypt(xmlStr);//加密
    //string dd = AES.AESDecrypt(aesCardInfo);
    FileStream fs = new FileStream(dir, FileMode.Create);//在dir路径下覆盖原来的xml文件
    StreamWriter sw = new StreamWriter(fs);
    sw.Write(aesCardInfo);
    sw.Flush();
    sw.Close();
    decryptionXml();//修改后重新加载gridview 
    }

    private void CopySetting()
    {
    string sourcePath = "D:\软件\管理系统\Config\Settings.xml";//要复制的源文件
    string destPath = Path.Combine(System.Windows.Forms.Application.StartupPath, "Config\Settings.xml");//目标路径文件名
    if (File.Exists(destPath ))
    File.Delete(destPath );
    System.IO.File.Copy(sourcePath , destPath );
    }

  • 相关阅读:
    Postgresql HStore 插件试用小结
    postgres-xl 安装与部署 【异常处理】ERROR: could not open file (null)/STDIN_***_0 for write, No such file or directory
    GPDB 5.x PSQL Quick Reference
    postgresql 数据库schema 复制
    hive 打印日志
    gp与 pg 查询进程
    jquery table 发送两次请求 解惑
    python 字符串拼接效率打脸帖
    postgresql 日期类型处理实践
    IBM Rational Rose软件下载以及全破解方法
  • 原文地址:https://www.cnblogs.com/meihuizi/p/6403796.html
Copyright © 2020-2023  润新知