逆水行船

别人的天堂,是我的异乡;无端的繁华,倍添我的惆怅

 

自己写的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);
  }
 }
}

posted on 2005-07-22 15:21  荣-  阅读(309)  评论(0编辑  收藏  举报

导航