自己写的XML操作代码
using System;
using System.Data;
using System.IO;
namespace CodeGen
{
/// <summary>
/// HdcCache 的摘要说明。
/// </summary>
public class HdcCache
{
/// <summary>
/// 存储数据的对象。
/// </summary>
/// <author>xumr</author>
/// <log date="2005-05-15">创建</log>
private object obj = null;
/// <summary>
/// 文件路径。
/// </summary>
/// <author>xumr</author>
/// <log date="2005-05-15">创建</log>
private string filePath = null;
/// <summary>
/// 文件的最后修改日期。
/// </summary>
/// <author>xumr</author>
/// <log date="2005-05-15">创建</log>
private DateTime fileUpdateTime;
/// <summary>
/// 刷新频率。
/// </summary>
/// <author>xumr</author>
/// <log date="2005-05-15">创建</log>
private int second = 0;
/// <summary>
/// 数据的读取日期。
/// </summary>
/// <author>xumr</author>
/// <log date="2005-05-15">创建</log>
private DateTime setTime;
/// <summary>
/// 默认构造函数。
/// </summary>
/// <author>xumr</author>
/// <log date="2005-05-15">创建</log>
public HdcCache()
{
//do nothing
}
/// <summary>
/// 取得文件数据。
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="second">数据更新频率</param>
public void Init(string filePath, int second)
{
this.obj = null;
this.filePath = filePath;
if (filePath != null)
{
this.fileUpdateTime = File.GetLastWriteTime(filePath);
this.second = second;
this.setTime = DateTime.Now;
}
}
public void Init(string filePath)
{
this.obj = null;
this.filePath = filePath;
if (filePath != null)
{
this.fileUpdateTime = File.GetLastWriteTime(filePath);
}
}
public void Init(int second)
{
this.obj = null;
this.second = second;
if (second <= 0)
{
this.setTime = DateTime.Now;
}
}
public object Get()
{
if (this.obj == null)
{
return null;
}
if (this.filePath != null)
{
DateTime updateTime = File.GetLastWriteTime(this.filePath);
if (!updateTime.Equals(this.fileUpdateTime))
{
this.obj = null;
return null;
}
}
if (this.second > 0)
{
TimeSpan timeSpan = DateTime.Now - this.setTime;
if (timeSpan.TotalSeconds > this.second)
{
this.obj = null;
return null;
}
}
return this.obj;
}
public void Set(object obj)
{
this.obj = obj;
if (this.second > 0)
{
this.setTime = DateTime.Now;
}
if (this.filePath != null)
{
this.fileUpdateTime = File.GetLastWriteTime(filePath);
}
}
}
}
using System;
using System.IO;
using System.Data;
using System.Collections;
using System.Xml;
namespace CodeGen
{
/// <summary>
/// ReadXML 的摘要说明。
/// </summary>
public class ReadXML
{
public static string XmlFileName = @"..\..\CharXml.xml";
public static HdcCache cache = new HdcCache();
public ReadXML()
{
//
// TODO:在此处添加构造函数逻辑
//
if (!File.Exists(XmlFileName))
{
throw new Exception("配置文件不存在!");
}
GetXMLDoc();
}
public XmlDocument GetXMLDoc()
{
XmlDocument xmlDoc = null;
xmlDoc = (XmlDocument)cache.Get();
if (xmlDoc == null)
{
lock(typeof(ReadXML))
{
xmlDoc = (XmlDocument)cache.Get();
if (xmlDoc == null)
{
xmlDoc = new XmlDocument();
xmlDoc.Load(XmlFileName);
cache.Init(XmlFileName);
cache.Set(xmlDoc);
}
}
}
return xmlDoc;
}
public string GetConstantValue(string itemName, string defName)
{
XmlNodeList scrNodes = GetXMLDoc().SelectNodes("//define[@itemname='" + defName + "' AND @defname='" + defName + "']]");
string retValue = "";
foreach (XmlNode nd in scrNodes)
{
retValue = nd.Attributes.GetNamedItem("value").Value;
}
return retValue;
}
public string GetConstantName(string itemName, string defValue)
{
XmlNodeList scrNodes = GetXMLDoc().SelectNodes("//define[@itemname='" + itemName + "' and @value='" + defValue + "']");
string retValue = "";
foreach(XmlNode nd in scrNodes)
{
retValue = nd.Attributes.GetNamedItem("defnme").Value;
}
return retValue;
}
public string GetConstantName(string itemName)
{
XmlNodeList scrNodes = GetXMLDoc().SelectNodes("//define[@itemname='" + itemName + "']");
string retValue = "";
foreach(XmlNode nd in scrNodes)
{
retValue = nd.Attributes.GetNamedItem("value").Value;
}
return retValue;
}
public DataTable GetConstantTable(string itemName)
{
DataTable retValue = new DataTable();
retValue.Columns.Add("column1", typeof(string));
retValue.Columns.Add("column2", typeof(string));
XmlNodeList scrNodes = GetXMLDoc().SelectNodes("//define[@itemname='" + itemName + "']");
foreach (XmlNode nd in scrNodes)
{
DataRow addRow = retValue.NewRow();
addRow["column1"] = nd.Attributes.GetNamedItem("value").Value;
addRow["column2"] = nd.Attributes.GetNamedItem("defname").Value;
retValue.Rows.Add(addRow);
}
return retValue;
}
public Hashtable GetConstantHashtable(string itemName)
{
Hashtable retValue = new Hashtable();
XmlNodeList scrNodes = GetXMLDoc().SelectNodes("//define[@itemname='" + itemName + "']");
foreach (XmlNode nd in scrNodes)
{
retValue[nd.Attributes.GetNamedItem("defname").Value] = nd.Attributes.GetNamedItem("value").Value;
}
return retValue;
}
public void SaveValue(string key, string attribute, string Value)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(XmlFileName);
XmlNodeList scrNodes = xmlDoc.SelectNodes("//define[@itemname='" + key + "']");
foreach (XmlNode nd in scrNodes)
{
nd.Attributes[attribute].Value = Value;
}
xmlDoc.Save(XmlFileName);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构