using System;
using System.Data;
using System.Xml;
namespace NingQHai.Tools
{
/// <summary>
/// XML文件操作的封装
/// </summary>
public class myXml
{
/// <summary>
/// 将DataTable当中的数据以XML方式存储到指定的位置
/// </summary>
/// <param name="tab">DataTable</param>
/// <param name="XmlPath">存储位置</param>
/// <returns>返回是否保存成功 true false</returns>
public static Boolean SaveXml(DataTable tab, String XmlPath) {
Boolean flag = false;
try {
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
tab.WriteXml(Path);
flag = true;
}
catch (Exception ex){
Err.ErrString = ex.Message;
}
return flag;
}
#region XML读操作返加表
/// <summary>
/// 返回所有的XML记录
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <returns></returns>
public static DataTable ReadXml(String XmlPath)
{
DataTable Tab = null;
try
{
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
DataSet ds = new DataSet();
ds.ReadXml(Path);
if (ds != null)
{
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = ds.Tables[0].Columns[0] + " Desc";
Tab = ds.Tables[0];
}
}
catch (Exception ex)
{
Err.ErrString = ex.ToString();
}
return Tab;
}
/// <summary>
/// 返回所有的XML记录
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <param name="SearchConditions">过滤条件,例如:id=1</param>
/// <returns></returns>
public static DataTable ReadXml(String XmlPath, String SearchConditions)
{
DataTable Tab = null;
try
{
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
DataSet ds = new DataSet();
ds.ReadXml(Path);
if (ds != null)
{
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = ds.Tables[0].Columns[0] + " Desc";
dv.RowFilter = SearchConditions;
Tab = ds.Tables[0];
}
}
catch (Exception ex)
{
Err.ErrString = ex.ToString();
}
return Tab;
}
/// <summary>
/// 返回所有的XML记录
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <param name="Sort">排序表达式;例"id desc"</param>
/// <param name="SearchConditions">过滤条件,例如:id=1</param>
/// <returns></returns>
public static DataTable ReadXml(String XmlPath, String Sort, String SearchConditions)
{
DataTable Tab = null;
try
{
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
DataSet ds = new DataSet();
ds.ReadXml(Path);
if (ds != null)
{
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = Sort;
dv.RowFilter = SearchConditions;
Tab = ds.Tables[0];
}
}
catch (Exception ex)
{
Err.ErrString = ex.ToString();
}
return Tab;
}
/// <summary>
/// 返回所有的XML记录
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <param name="Size">返回的记录条数</param>
/// <param name="SearchConditions">过滤条件,例如:id=1</param>
/// <returns></returns>
public static DataTable ReadXml(String XmlPath, int Size, String SearchConditions)
{
DataTable Tab = null;
try
{
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
DataSet ds = new DataSet();
ds.ReadXml(Path);
if (ds != null)
{
DataTable BigTab = new DataTable();
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = ds.Tables[0].Columns[0].ColumnName + " Desc";
dv.RowFilter = SearchConditions;
BigTab = dv.ToTable();
DataTable SmallTab = new DataTable();
SmallTab = BigTab.Clone();
for (int i = 0; i < Size; i++)
{
SmallTab.Rows.Add(dv[i].Row.ItemArray);
}
Tab = SmallTab;
}
}
catch (Exception ex)
{
Err.ErrString = ex.ToString();
}
return Tab;
}
/// <summary>
/// 返回所有的XML记录
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <param name="Size">返回的记录条数</param>
/// <returns></returns>
public static DataTable ReadXml(String XmlPath, int Size)
{
DataTable Tab = null;
try
{
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
DataSet ds = new DataSet();
ds.ReadXml(Path);
if (ds != null)
{
DataTable BigTab = new DataTable();
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = ds.Tables[0].Columns[0].ColumnName + " Desc";
BigTab = dv.ToTable();
DataTable SmallTab = new DataTable();
SmallTab = BigTab.Clone();
for (int i = 0; i < Size; i++)
{
SmallTab.Rows.Add(dv[i].Row.ItemArray);
}
Tab = SmallTab;
}
}
catch (Exception ex)
{
Err.ErrString = ex.ToString();
}
return Tab;
}
/// <summary>
/// 返回所有的XML记录
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <param name="Size">返回的记录条数</param>
/// <param name="Sort">排序表达式;例"id desc"</param>
/// <param name="SearchConditions">过滤条件,例如:id=1</param>
/// <returns></returns>
public static DataTable ReadXml(String XmlPath, int Size, String Sort, String SearchConditions)
{
DataTable Tab = null;
try
{
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
DataSet ds = new DataSet();
ds.ReadXml(Path);
if (ds != null)
{
DataTable BigTab = new DataTable();
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = Sort;
dv.RowFilter = SearchConditions;
BigTab = dv.ToTable();
DataTable SmallTab = new DataTable();
SmallTab = BigTab.Clone();
for (int i = 0; i < Size; i++)
{
SmallTab.Rows.Add(dv[i].Row.ItemArray);
}
Tab = SmallTab;
}
}
catch (Exception ex)
{
Err.ErrString = ex.ToString();
}
return Tab;
}
#endregion
/// <summary>
/// 读取XML文件当中的一个节点文本
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <param name="XPath">读取的节点完整XPath</param>
/// <returns>指点节点内容</returns>
public static String readXmlByNode(String XmlPath,String XPath) {
String s = "";
try {
// NingQHai.Tools.Utils.GetMapPath(XPath);
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);//HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath) + "/" + XmlPath;
XmlDataDocument xmlDoc = new System.Xml.XmlDataDocument();
xmlDoc.Load(Path);
XmlNode node = xmlDoc.SelectSingleNode(XPath);
if (node != null) {
s = node.InnerText;
}
}
catch(Exception ex) {
Err.ErrString = ex.ToString();
}
return s;
}
#region 删除XML文件中指定结点
/// <summary>
/// 删除XML文件中指定结点
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <param name="RootNodeName">XML文件中跟节点的名称</param>
/// <param name="Key">XML文件中唯一能标识此记录的属性和节点名称</param>
/// <param name="KeyValue">XML文件中键的值</param>
/// <returns></returns>
public static Boolean DeleteNode(String XmlPath, String RootNodeName, String Key, String KeyValue)
{
Boolean Flag = false;
try
{
XmlDocument xmlDoc = new XmlDocument();
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
xmlDoc.Load(Path);
XmlNodeList xnl = xmlDoc.SelectSingleNode(RootNodeName).ChildNodes;
foreach (XmlNode xn in xnl)
{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute(Key) == KeyValue)
{
xe.ParentNode.RemoveChild(xn);
break;
}
}
xmlDoc.Save(Path);
Flag = true;
}
catch (Exception Ex)
{
Err.ErrString = Ex.ToString();
}
return Flag;
}
#endregion
#region XML文件的添加操作
/// <summary>
/// XML文件的添加操作
/// </summary>
/// <param name="XmlPath">XML文件路径</param>
/// <param name="RootNodeName">根节点名称</param>
/// <param name="CreateChildNode">要添加的节点</param>
/// <param name="Keys">属性集合,例:"姓名,邮箱,QQ"</param>
/// <param name="KeyValues">属性值的集合例:"Ningqhai,ningqhai@163.com,32806174"</param>
/// <returns></returns>
public static Boolean AddElement(String XmlPath, String RootNodeName, String CreateChildNode, String[] Keys, String[] KeyValues)
{
Boolean Flag = false;
try
{
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Path);
XmlNode xmldocSelect = xmlDoc.SelectSingleNode(RootNodeName);
XmlElement el = xmlDoc.CreateElement(CreateChildNode); //添加CreateChildNode节点
for (int i = 0; i < Keys.Length; i++)
{
el.SetAttribute(Keys[i], KeyValues[i]); //添加CreateChildNode节点的属性Keys的KeyValues值
}
xmldocSelect.AppendChild(el);
xmlDoc.Save(Path);
Flag = true;
}
catch (Exception Ex)
{
Err.ErrString = Ex.ToString();
}
return Flag;
}
#endregion
#region XML节点或属性的修改操作
/// <summary>
/// 修改属性
/// </summary>
/// <param name="XmlPath">XMl文件路径</param>
/// <param name="RootNodeName">根节点的名称</param>
/// <param name="UpDateKey">主键名称</param>
/// <param name="UpdateKeyValue">主键的值</param>
/// <param name="Keys">属性集合,例:"姓名,邮箱,QQ"</param>
/// <param name="KeyValues">属性值的集合例:"Ningqhai,ningqhai@163.com,32806174"</param>
/// <returns></returns>
public static Boolean UpdateElement(String XmlPath, String RootNodeName, String UpDateKey, String UpdateKeyValue, String[] Keys, String[] KeyValues)
{
Boolean Flag = false;
try
{
XmlDocument xmlDoc = new XmlDocument();
String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
xmlDoc.Save(Path);
XmlNodeList nodeList = xmlDoc.SelectSingleNode(RootNodeName).ChildNodes;//获取bookstore节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute(UpDateKey) == UpdateKeyValue)
for (int i = 0; i < Keys.Length; i++)
{
xe.SetAttribute(Keys[i], KeyValues[i]);
}
}
xmlDoc.Save(Path);
return true;
}
catch (Exception ex)
{
Err.ErrString = ex.ToString();
}
return Flag;
}
#endregion
}
}