You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

415 lines
14 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Data;
using System.IO;
namespace demo.ClassHelper.XML
{
class XmlHelper
{
#region 构造函数
public XmlHelper()
{ }
public XmlHelper(string strPath)
{
this._XMLPath = strPath;
}
#endregion
#region 公有属性
private string _XMLPath;
public string XMLPath
{
get { return this._XMLPath; }
}
#endregion
#region 私有方法
/// <summary>
/// 导入XML文件
/// </summary>
/// <param name="XMLPath">XML文件路径</param>
private XmlDocument XMLLoad()
{
string XMLFile = XMLPath;
XmlDocument xmldoc = new XmlDocument();
try
{
string filename = AppDomain.CurrentDomain.BaseDirectory.ToString() + XMLFile;
if (File.Exists(filename)) xmldoc.Load(filename);
}
catch
{ }
return xmldoc;
}
/// <summary>
/// 导入XML文件
/// </summary>
/// <param name="XMLPath">XML文件路径</param>
private static XmlDocument XMLLoad(string strPath)
{
XmlDocument xmldoc = new XmlDocument();
try
{
string filename = AppDomain.CurrentDomain.BaseDirectory.ToString() + strPath;
if (File.Exists(filename)) xmldoc.Load(filename);
}
catch
{ }
return xmldoc;
}
/// <summary>
/// 返回完整路径
/// </summary>
/// <param name="strPath">Xml的路径</param>
//private static string GetXmlFullPath(string strPath)
//{
// if (strPath.IndexOf(":") > 0)
// {
// return strPath;
// }
// else
// {
// return System.Web.HttpContext.Current.Server.MapPath(strPath);
// }
//}
#endregion
#region 读取数据
/// <summary>
/// 读取指定节点的数据
/// </summary>
/// <param name="node">节点</param>
/// 使用示列:
/// XMLProsess.Read("/Node", "")
/// XMLProsess.Read("/Node/Element[@Attribute='Name']")
public string Read(string node)
{
string value = "";
try
{
XmlDocument doc = XMLLoad();
XmlNode xn = doc.SelectSingleNode(node);
value = xn.InnerText;
}
catch { }
return value;
}
/// <summary>
/// 读取指定路径和节点的串联值
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
/// 使用示列:
/// XMLProsess.Read(path, "/Node", "")
/// XMLProsess.Read(path, "/Node/Element[@Attribute='Name']")
public static string Read(string path, string node)
{
string value = "";
try
{
XmlDocument doc = XMLLoad(path);
XmlNode xn = doc.SelectSingleNode(node);
value = xn.InnerText;
}
catch { }
return value;
}
/// <summary>
/// 读取指定路径和节点的属性值
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
/// 使用示列:
/// XMLProsess.Read(path, "/Node", "")
/// XMLProsess.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")
public static string Read(string path, string node, string attribute)
{
string value = "";
try
{
XmlDocument doc = XMLLoad(path);
XmlNode xn = doc.SelectSingleNode(node);
value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
}
catch { }
return value;
}
/// <summary>
/// 获取某一节点的所有孩子节点的值
/// </summary>
/// <param name="node">要查询的节点</param>
public string[] ReadAllChildallValue(string node)
{
int i = 0;
string[] str = { };
XmlDocument doc = XMLLoad();
XmlNode xn = doc.SelectSingleNode(node);
XmlNodeList nodelist = xn.ChildNodes; //得到该节点的子节点
if (nodelist.Count > 0)
{
str = new string[nodelist.Count];
foreach (XmlElement el in nodelist)//读元素值
{
str[i] = el.Value;
i++;
}
}
return str;
}
/// <summary>
/// 获取某一节点的所有孩子节点的值
/// </summary>
/// <param name="node">要查询的节点</param>
public XmlNodeList ReadAllChild(string node)
{
XmlDocument doc = XMLLoad();
XmlNode xn = doc.SelectSingleNode(node);
XmlNodeList nodelist = xn.ChildNodes; //得到该节点的子节点
return nodelist;
}
/// <summary>
/// 读取XML返回经排序或筛选后的DataView
/// </summary>
/// <param name="strWhere">筛选条件,如:"name='kgdiwss'"</param>
/// <param name="strSort"> 排序条件,如:"Id desc"</param>
public DataView GetDataViewByXml(string strWhere, string strSort)
{
try
{
string XMLFile = this.XMLPath;
string filename = AppDomain.CurrentDomain.BaseDirectory.ToString() + XMLFile;
DataSet ds = new DataSet();
ds.ReadXml(filename);
DataView dv = new DataView(ds.Tables[0]); //创建DataView来完成排序或筛选操作
if (strSort != null)
{
dv.Sort = strSort; //对DataView中的记录进行排序
}
if (strWhere != null)
{
dv.RowFilter = strWhere; //对DataView中的记录进行筛选找到我们想要的记录
}
return dv;
}
catch (Exception)
{
return null;
}
}
#endregion
#region 插入数据
/// <summary>
/// 插入数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
/// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
/// <param name="value">值</param>
/// 使用示列:
/// XMLProsess.Insert(path, "/Node", "Element", "", "Value")
/// XMLProsess.Insert(path, "/Node", "Element", "Attribute", "Value")
/// XMLProsess.Insert(path, "/Node", "", "Attribute", "Value")
public static void Insert(string path, string node, string element, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);
XmlNode xn = doc.SelectSingleNode(node);
if (element.Equals(""))
{
if (!attribute.Equals(""))
{
XmlElement xe = (XmlElement)xn;
xe.SetAttribute(attribute, value);
}
}
else
{
XmlElement xe = doc.CreateElement(element);
if (attribute.Equals(""))
xe.InnerText = value;
else
xe.SetAttribute(attribute, value);
xn.AppendChild(xe);
}
doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);
}
catch { }
}
/// <summary>
/// 插入数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
/// <param name="strList">由XML属性名和值组成的二维数组</param>
public static void Insert(string path, string node, string element, string[][] strList)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = doc.CreateElement(element);
string strAttribute = "";
string strValue = "";
for (int i = 0; i < strList.Length; i++)
{
for (int j = 0; j < strList[i].Length; j++)
{
if (j == 0)
strAttribute = strList[i][j];
else
strValue = strList[i][j];
}
if (strAttribute.Equals(""))
xe.InnerText = strValue;
else
xe.SetAttribute(strAttribute, strValue);
}
xn.AppendChild(xe);
doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);
}
catch { }
}
#endregion
#region 修改数据
/// <summary>
/// 修改指定节点的数据
/// </summary>
/// <param name="node">节点</param>
/// <param name="value">值</param>
public void Update(string node, string value)
{
try
{
XmlDocument doc = XMLLoad();
XmlNode xn = doc.SelectSingleNode(node);
xn.InnerText = value;
doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + XMLPath);
}
catch { }
}
/// <summary>
/// 修改指定节点的数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="value">值</param>
/// 使用示列:
/// XMLProsess.Insert(path, "/Node","Value")
/// XMLProsess.Insert(path, "/Node","Value")
public static void Update(string path, string node, string value)
{
try
{
XmlDocument doc = XMLLoad(path);
XmlNode xn = doc.SelectSingleNode(node);
xn.InnerText = value;
doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);
}
catch { }
}
/// <summary>
/// 修改指定节点的属性值(静态)
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
/// <param name="value">值</param>
/// 使用示列:
/// XMLProsess.Insert(path, "/Node", "", "Value")
/// XMLProsess.Insert(path, "/Node", "Attribute", "Value")
public static void Update(string path, string node, string attribute, string value)
{
try
{
XmlDocument doc = XMLLoad(path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = (XmlElement)xn;
if (attribute.Equals(""))
xe.InnerText = value;
else
xe.SetAttribute(attribute, value);
doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);
}
catch { }
}
#endregion
#region 删除数据
/// <summary>
/// 删除节点值
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
/// <param name="value">值</param>
/// 使用示列:
/// XMLProsess.Delete(path, "/Node", "")
/// XMLProsess.Delete(path, "/Node", "Attribute")
public static void Delete(string path, string node)
{
try
{
XmlDocument doc = XMLLoad(path);
XmlNode xn = doc.SelectSingleNode(node);
xn.ParentNode.RemoveChild(xn);
doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);
}
catch { }
}
/// <summary>
/// 删除数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
/// <param name="value">值</param>
/// 使用示列:
/// XMLProsess.Delete(path, "/Node", "")
/// XMLProsess.Delete(path, "/Node", "Attribute")
public static void Delete(string path, string node, string attribute)
{
try
{
XmlDocument doc = XMLLoad(path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = (XmlElement)xn;
if (attribute.Equals(""))
xn.ParentNode.RemoveChild(xn);
else
xe.RemoveAttribute(attribute);
doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);
}
catch { }
}
#endregion
}
}