根据项目需求,我们需要记录用户的操作痕迹,当用户下次登录操作同一个文件时,页面显示为用户上一次执行的用户轨迹,我们考虑把用户的历史记录写进xml文件中。

存储的xml数据结构:

XML操作类:

 using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml; namespace iImgEnh.UI.AuthenticateImage.AuthImageMethods.Model
{
public class VideoContinuityReadWriteRecord
{
#region 属性
/// <summary>
/// 存放xml内容的文件夹下的文件名
/// </summary>
private string DicFileName = "resources/XMLFile.xml"; #endregion #region 写入xml
/// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <param name="content"></param>
/// <param name="dateTimeStr"></param>
public void WriteDoc(string file,string content,string dateTimeStr)
{
string SavePath = Path.Combine(Directory.GetCurrentDirectory(), "resources"); //判断是否存在文件夹
var DirectoryPath = Path.GetDirectoryName(SavePath); //获取文件夹所在的路径
if (!Directory.Exists(SavePath))
{
Directory.CreateDirectory(SavePath); //创建文件夹
}
XmlDocument doc = new XmlDocument();
if (File.Exists(DicFileName))
{
//如果文件存在 加载XML
doc.Load(DicFileName);
//获得文件的根节点
XmlNodeList xnl = doc.SelectNodes("/Positions/Position/Item");
if (xnl.Count < )
{
CreateDoc(file, content,dateTimeStr);
}
else
{
XmlNode PNode = null;
var isHave = false;
foreach (XmlNode item in xnl)
{
PNode = item.ParentNode;
var name = item.Attributes["Name"].Value;
//var text = item.Attributes["Content"].Value;
if (name == file)
{
isHave = true;
item.Attributes["Content"].Value = content;
item.Attributes["Time"].Value = dateTimeStr;
break;
}
}
if (!isHave)
{
var en = doc.DocumentElement;
XmlElement name1 = doc.CreateElement("Item");
name1.SetAttribute("Name", file);
name1.SetAttribute("Content", content);
name1.SetAttribute("Time", dateTimeStr);
PNode.AppendChild(name1); if (xnl.Count > )
{
PNode.RemoveChild(xnl[]);
} }
}
doc.Save(DicFileName);
}
else
{
CreateDoc(file, content,dateTimeStr);
}
} /// <summary>
/// 读取XML文件
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public RecordInfo ReadDoc(string file)
{
RecordInfo info = new RecordInfo();
XmlDocument doc = new XmlDocument();
if (File.Exists(DicFileName))
{
//如果文件存在 加载XML
doc.Load(DicFileName);
//获得文件的根节点
XmlNodeList xnl = doc.SelectNodes("/Positions/Position/Item");
if (xnl.Count > )
{
foreach (XmlNode item in xnl)
{
if (item.Attributes["Name"].Value == file)
{
info.Position = item.Attributes["Content"].Value;
info.Time = item.Attributes["Time"].Value;
}
}
}
}
return info;
} /// <summary>
/// 创建XML文件
/// </summary>
/// <param name="file"></param>
/// <param name="content"></param>
/// <param name="dateTimeStr"></param>
private void CreateDoc(string file, string content,string dateTimeStr)
{
XmlDocument doc = new XmlDocument();
//3、创建第一个行描述信息,并且添加到doc文档中
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
//4、创建根节点
XmlElement books = doc.CreateElement("Positions");
//将根节点添加到文档中
doc.AppendChild(books); //5、给根节点Books创建子节点
XmlElement book1 = doc.CreateElement("Position");
//将book添加到根节点
books.AppendChild(book1);
//6、给Book1添加子节点
XmlElement name1 = doc.CreateElement("Item");
name1.SetAttribute("Name", file);
name1.SetAttribute("Content", content);
name1.SetAttribute("Time", dateTimeStr);
book1.AppendChild(name1); doc.Save(DicFileName);
} #endregion
} public class RecordInfo
{
/// <summary>
/// 位置
/// </summary>
public string Position { get; set; } /// <summary>
/// 时间格式
/// </summary>
public string Time { get; set; }
}
}

c# 操作xml文件(读写)的更多相关文章

  1. 实现动态的XML文件读写操作

    实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...

  2. 实现动态的XML文件读写操作(依然带干货)

    前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义好XML文件的格式就不太现实了,如何实现不管 ...

  3. Qt之QDomDocument操作xml文件-模拟ini文件存储

    一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...

  4. QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写   ...

  5. QSettings配置读写-win注册表操作-ini文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSettings配置读写-win注册表操作-ini文件读写     本文地址:http:// ...

  6. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  7. Java操作XML文件 dom4j 篇

    在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...

  8. PHP操作XML文件学习笔记

    原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作 ...

  9. JAVA中通过Jaxp操作XML文件基础

    Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...

  10. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

随机推荐

  1. Mathmatica中的Sum命令

    在Mathematica中,Sum不能直接用于计算列表的和.如图1所示. 图1:利用Sum函数直接计算列表的和出错. 可以采用如下格式的语句:Sum[Part[x0, i], {i, 1, 4}];

  2. 测试Leader应该做哪些事

    一.负责测试组的工作组织和管理 1.参加软件产品开发前的需求调研和分析: 2.根据需求,概要设计和开发计划编写项目总体测试计划,详细测试计划,测试大纲和测试文档结构表(测试计划 a.已上线产品维护以及 ...

  3. Alpha冲刺(5/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 准备"Alpha事后诸葛亮" 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们 ...

  4. linux定时执行shell脚本

    写一个shell脚本,定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 Shell俗称壳,类 ...

  5. Hotspot研究-工程结构

  6. golang调用 exec命令 出现too many open files

    systemd 启动的服务, 跟系统的ulimit 没有关系. 大概的意思就是通过systemd启动的服务,不会使用ulimit中的配置,需要在systemd中或者service配置文件中定义,可以通 ...

  7. android -------- DES加密解密算法

    DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信 ...

  8. 微信小程序开发——微信小程序下拉刷新真机无法弹回

    开发工具中下拉之后页面回弹有一定的延迟,这个时间也有点久.真机测试,下拉后连回弹都没有,这个问题要解决,就得在下拉函数里加上停止下拉刷新的API,如下: /** * 下拉刷新 */ onPullDow ...

  9. Win10 LTSC 2019 安装和卸载 linux 子系统

    一.开启 二.下载 https://docs.microsoft.com/zh-cn/windows/wsl/install-manual   手动下载适用于 Linux 的 Windows 子系统发 ...

  10. Spring cloud微服务安全实战-7-7自定义metrics监控指标(2)

    Gauge用来显示单词一个数的 勾选,这里编程仪表盘 设置仪表盘的最大值.最小值 保存 直接保存 保存成功的提示 返回 这就是我们做的一个简单的仪表盘 这个不适合我们的counter,因为没有最大值 ...