C# XML操作類 XmlHelper
using System.Xml;
using System.Data;
namespace DotNet.Utilities
{
/// <summary>
/// Xml的操作公共類
/// </summary>
public class XmlHelper
{
#region 欄位定義
/// <summary>
/// XML檔案的物理路徑
/// </summary>
private string _filePath = string.Empty;
/// <summary>
/// Xml文件
/// </summary>
private XmlDocument _xml;
/// <summary>
/// XML的根節點
/// </summary>
private XmlElement _element;
#endregion
#region 構造方法
/// <summary>
/// 例項化XmlHelper物件
/// </summary>
/// <param name="xmlFilePath">Xml檔案的相對路徑</param>
public XmlHelper(string xmlFilePath)
{
//獲取XML檔案的絕對路徑
_filePath = SysHelper.GetPath(xmlFilePath);
}
#endregion
#region 建立XML的根節點
/// <summary>
/// 建立XML的根節點
/// </summary>
private void CreateXMLElement()
{
//建立一個XML物件
_xml = new XmlDocument();
if (DirFile.IsExistFile(_filePath))
{
//載入XML檔案
_xml.Load(this._filePath);
}
//為XML的根節點賦值
_element = _xml.DocumentElement;
}
#endregion
#region 獲取指定XPath表示式的節點物件
/// <summary>
/// 獲取指定XPath表示式的節點物件
/// </summary>
/// <param name="xPath">XPath表示式,
/// 範例1: @"Skill/First/SkillItem", 等效於 @"//Skill/First/SkillItem"
/// 範例2: @"Table[USERNAME='a']" , []表示篩選,USERNAME是Table下的一個子節點.
/// 範例3: @"ApplyPost/Item[@itemName='崗位編號']",@itemName是Item節點的屬性.
/// </param>
public XmlNode GetNode(string xPath)
{
//建立XML的根節點
CreateXMLElement();
//返回XPath節點
return _element.SelectSingleNode(xPath);
}
#endregion
#region 獲取指定XPath表示式節點的值
/// <summary>
/// 獲取指定XPath表示式節點的值
/// </summary>
/// <param name="xPath">XPath表示式,
/// 範例1: @"Skill/First/SkillItem", 等效於 @"//Skill/First/SkillItem"
/// 範例2: @"Table[USERNAME='a']" , []表示篩選,USERNAME是Table下的一個子節點.
/// 範例3: @"ApplyPost/Item[@itemName='崗位編號']",@itemName是Item節點的屬性.
/// </param>
public string GetValue(string xPath)
{
//建立XML的根節點
CreateXMLElement();
//返回XPath節點的值
return _element.SelectSingleNode(xPath).InnerText;
}
#endregion
#region 獲取指定XPath表示式節點的屬性值
/// <summary>
/// 獲取指定XPath表示式節點的屬性值
/// </summary>
/// <param name="xPath">XPath表示式,
/// 範例1: @"Skill/First/SkillItem", 等效於 @"//Skill/First/SkillItem"
/// 範例2: @"Table[USERNAME='a']" , []表示篩選,USERNAME是Table下的一個子節點.
/// 範例3: @"ApplyPost/Item[@itemName='崗位編號']",@itemName是Item節點的屬性.
/// </param>
/// <param name="attributeName">屬性名</param>
public string GetAttributeValue(string xPath, string attributeName)
{
//建立XML的根節點
CreateXMLElement();
//返回XPath節點的屬性值
return _element.SelectSingleNode(xPath).Attributes[attributeName].Value;
}
#endregion
#region 新增節點
/// <summary>
/// 1. 功能:新增節點。
/// 2. 使用條件:將任意節點插入到當前Xml檔案中。
/// </summary>
/// <param name="xmlNode">要插入的Xml節點</param>
public void AppendNode(XmlNode xmlNode)
{
//建立XML的根節點
CreateXMLElement();
//匯入節點
XmlNode node = _xml.ImportNode(xmlNode, true);
//將節點插入到根節點下
_element.AppendChild(node);
}
/// <summary>
/// 1. 功能:新增節點。
/// 2. 使用條件:將DataSet中的第一條記錄插入Xml檔案中。
/// </summary>
/// <param name="ds">DataSet的例項,該DataSet中應該只有一條記錄</param>
public void AppendNode(DataSet ds)
{
//建立XmlDataDocument物件
XmlDataDocument xmlDataDocument = new XmlDataDocument(ds);
//匯入節點
XmlNode node = xmlDataDocument.DocumentElement.FirstChild;
//將節點插入到根節點下
AppendNode(node);
}
#endregion
#region 刪除節點
/// <summary>
/// 刪除指定XPath表示式的節點
/// </summary>
/// <param name="xPath">XPath表示式,
/// 範例1: @"Skill/First/SkillItem", 等效於 @"//Skill/First/SkillItem"
/// 範例2: @"Table[USERNAME='a']" , []表示篩選,USERNAME是Table下的一個子節點.
/// 範例3: @"ApplyPost/Item[@itemName='崗位編號']",@itemName是Item節點的屬性.
/// </param>
public void RemoveNode(string xPath)
{
//建立XML的根節點
CreateXMLElement();
//獲取要刪除的節點
XmlNode node = _xml.SelectSingleNode(xPath);
//刪除節點
_element.RemoveChild(node);
}
#endregion //刪除節點
#region 儲存XML檔案
/// <summary>
/// 儲存XML檔案
/// </summary>
public void Save()
{
//建立XML的根節點
CreateXMLElement();
//儲存XML檔案
_xml.Save(this._filePath);
}
#endregion //儲存XML檔案
#region 靜態方法
#region 建立根節點物件
/// <summary>
/// 建立根節點物件
/// </summary>
/// <param name="xmlFilePath">Xml檔案的相對路徑</param>
private static XmlElement CreateRootElement(string xmlFilePath)
{
//定義變數,表示XML檔案的絕對路徑
string filePath = "";
//獲取XML檔案的絕對路徑
filePath = SysHelper.GetPath(xmlFilePath);
//建立XmlDocument物件
XmlDocument xmlDocument = new XmlDocument();
//載入XML檔案
xmlDocument.Load(filePath);
//返回根節點
return xmlDocument.DocumentElement;
}
#endregion
#region 獲取指定XPath表示式節點的值
/// <summary>
/// 獲取指定XPath表示式節點的值
/// </summary>
/// <param name="xmlFilePath">Xml檔案的相對路徑</param>
/// <param name="xPath">XPath表示式,
/// 範例1: @"Skill/First/SkillItem", 等效於 @"//Skill/First/SkillItem"
/// 範例2: @"Table[USERNAME='a']" , []表示篩選,USERNAME是Table下的一個子節點.
/// 範例3: @"ApplyPost/Item[@itemName='崗位編號']",@itemName是Item節點的屬性.
/// </param>
public static string GetValue(string xmlFilePath, string xPath)
{
//建立根物件
XmlElement rootElement = CreateRootElement(xmlFilePath);
//返回XPath節點的值
return rootElement.SelectSingleNode(xPath).InnerText;
}
#endregion
#region 獲取指定XPath表示式節點的屬性值
/// <summary>
/// 獲取指定XPath表示式節點的屬性值
/// </summary>
/// <param name="xmlFilePath">Xml檔案的相對路徑</param>
/// <param name="xPath">XPath表示式,
/// 範例1: @"Skill/First/SkillItem", 等效於 @"//Skill/First/SkillItem"
/// 範例2: @"Table[USERNAME='a']" , []表示篩選,USERNAME是Table下的一個子節點.
/// 範例3: @"ApplyPost/Item[@itemName='崗位編號']",@itemName是Item節點的屬性.
/// </param>
/// <param name="attributeName">屬性名</param>
public static string GetAttributeValue(string xmlFilePath, string xPath, string attributeName)
{
//建立根物件
XmlElement rootElement = CreateRootElement(xmlFilePath);
//返回XPath節點的屬性值
return rootElement.SelectSingleNode(xPath).Attributes[attributeName].Value;
}
#endregion
#endregion
public static void SetValue(string xmlFilePath, string xPath, string newtext)
{
//string path = SysHelper.GetPath(xmlFilePath);
//var queryXML = from xmlLog in xelem.Descendants("msg_log")
// //所有名字為Bin的記錄
// where xmlLog.Element("user").Value == "Bin"
// select xmlLog;
//foreach (XElement el in queryXML)
//{
// el.Element("user").Value = "LiuBin";//開始修改
//}
//xelem.Save(path);
}
}
}