public class XmlHelper
{
#region 变量
private string m_FileName = "";
private XmlDocument m_XmlDoc = new XmlDocument();
private bool m_IsLoad = false;
#endregion
#region 属性
public string FileName
{
set { m_FileName = value; }
get { return m_FileName; }
}
#endregion
#region 构造方法
public XmlHelper(string fileName)
{ m_FileName = fileName; }
public XmlHelper() { }
#endregion
#region 方法
/// <summary>
/// 创建xml文件,需最后调用SaveXml进行保存
/// </summary>
/// <param name="rootString">根元素</param>
/// <param name="encoding">编码</param>
/// <param name="strErr"></param>
/// <returns>根节点</returns>
public XmlNode CreatXmlTree(string rootString, string encoding, ref string strErr)
{
strErr = "";
try
{
XmlDeclaration dec = m_XmlDoc.CreateXmlDeclaration("1.0", encoding, null);
//添加进doc对象子节点
m_XmlDoc.AppendChild(dec);
//创建根节点
XmlElement root = m_XmlDoc.CreateElement(rootString);
m_XmlDoc.AppendChild(root);
m_IsLoad = true;
return root;
}
catch (Exception ex)
{
strErr = ex.Message;
return null;
}
}
/// <summary>
/// 新增节点,也是增加元素
/// </summary>
/// <param name="parentNode">父节点</param>
/// <param name="newNodeName">新节点名称</param>
/// <param name="innerText">新节点内容</param>
/// <param name="attrNames">节点属性名集合</param>
/// <param name="attrVals">节点属性值集合</param>
/// <returns>返回创建的节点,失败为null</returns>
public XmlNode AddNode(XmlNode parentNode, string newNodeName, string innerText, ref string strErr)
{
strErr = "";
try
{
if (!m_IsLoad)
{
strErr = "未加载" + FileName + "文件";
return null;
}
if (parentNode == null)
{
strErr = "父节点为null";
return null;
}
XmlNode newNode = m_XmlDoc.CreateNode("element", newNodeName, "");
newNode.InnerText = innerText;
parentNode.AppendChild(newNode);
return newNode;
}
catch (Exception ex)
{
strErr = ex.Message;
return null;
}
}
public XmlNode AddNode(XmlNode parentNode, string newNodeName, string innerText, string[] attrNames, string[] attrVals, ref string strErr)
{
strErr = "";
try
{
if (!m_IsLoad)
{
strErr = "未加载" + FileName + "文件";
return null;
}
if (parentNode == null)
{
strErr = "父节点为null";
return null;
}
//var root = xmlDoc.DocumentElement;//取到根结点
XmlNode newNode = m_XmlDoc.CreateNode("element", newNodeName, "");
#region 添加属性
if (attrNames != null && attrVals != null)
{
for (int i = 0; i < attrNames.Length; i++)
{
this.AddAttribute(newNode, attrNames[i], attrVals[i], ref strErr);
}
}
#endregion
newNode.InnerText = innerText;
parentNode.AppendChild(newNode);
//添加为根元素的第一层子结点
//root.AppendChild(newNode);
return newNode;
}
catch (Exception ex)
{
strErr = ex.Message;
return null;
}
}
/// <summary>
///
/// </summary>
/// <param name="nodePath">节点名称,如BookStore/NewBook</param>
/// <param name="attrName">属性名称,如Name</param>
/// <param name="attrVal">属性值,如WPF</param>
/// <BookStore><NewBook Name="WPF"></NewBook></BookStore>
public void AddAttribute(XmlNode node, string attrName, string attrVal, ref string strErr)
{
strErr = "";
try
{
XmlElement elem = (XmlElement)node;
elem.SetAttribute(attrName, attrVal);//<NewBook Name="WPF">WPF</NewBook>
}
catch (Exception ex)
{
strErr = ex.Message;
}
}
/// <summary>
/// 修改属性值(不能修改节点)
/// </summary>
/// <param name="nodePath">"BookStore/NewBook"</param>
/// <param name="attrName">"Name"</param>
/// <param name="attrVal">值</param>
public void ModifyAttribute(XmlNode node, string attrName, string attrVal, ref string strErr)
{
strErr = "";
try
{
XmlElement elem = (XmlElement)node;
elem.SetAttribute(attrName, attrVal);
}
catch (Exception ex)
{
strErr = ex.Message;
}
}
/// <summary>
/// 删除属性
/// </summary>
/// <param name="XmlNode"></param>
/// <param name="attrName"></param>
public void DeleteAttribute(XmlNode node, string attrName, ref string strErr)
{
strErr = "";
try
{
XmlElement elem = (XmlElement)node;
//移除指定属性
elem.RemoveAttribute(attrName);
//移除当前节点所有属性,不包括默认属性
//elem.RemoveAllAttributes();
}
catch (Exception ex)
{
strErr = ex.Message;
}
}
/// <summary>
/// 加载Xml文件
/// </summary>
/// <param name="strErr">错误信息</param>
/// <returns>根节点</returns>
public XmlNode LoadXml(ref string strErr)
{
strErr = "";
string xmlPath = m_FileName;
try
{
XmlDocument m_XmlDoc = new XmlDocument();
m_XmlDoc.Load(xmlPath);
//取根结点
var root = m_XmlDoc.DocumentElement;//取到根结点
m_IsLoad = true;
return root;
}
catch (Exception ex)
{
strErr = ex.Message;
return null;
}
}
public bool SaveXml(ref string strErr)
{
try
{
DirectoryHelper.CreateDirectory(m_FileName);
m_IsLoad = false;
m_XmlDoc.Save(m_FileName);
return true;
}
catch (Exception ex)
{
strErr = ex.Message;
return false;
}
}
public XmlNode GetRootNode(ref string strErr)
{
strErr = "";
string xmlPath = m_FileName;
try
{
if (!m_IsLoad)
{
LoadXml(ref strErr);
}
//取根结点
var root = m_XmlDoc.DocumentElement;//取到根结点
return root;
}
catch (Exception ex)
{
strErr = ex.Message;
return null;
}
}
/// <summary>
/// 获取指定路径名的单个节点
/// </summary>
/// <param name="nodePath">从根节点到指定节点的路径,如"NewBook"</param>
/// <returns>单个节点</returns>
public XmlNode GetChildNode(XmlNode parentNode, string childNode, ref string strErr)
{
strErr = "";
try
{
if (!m_IsLoad)
{
strErr = "未加载" + FileName + "文件";
return null;
}
XmlNode node = parentNode.SelectSingleNode(childNode);
return node;
}
catch (Exception ex)
{
strErr = ex.Message;
return null;
}
}
public XmlNodeList GetChildNodeList(XmlNode parentNode, string childNode, ref string strErr)
{
strErr = "";
try
{
if (!m_IsLoad)
{
strErr = "未加载" + FileName + "文件";
return null;
}
XmlNodeList nodelist = parentNode.SelectNodes(childNode);
return nodelist;
}
catch (Exception ex)
{
strErr = ex.Message;
return null;
}
}
public XmlNodeList GetAllChildNodes(XmlNode parentNode, ref string strErr)
{
strErr = "";
try
{
if (!m_IsLoad)
{
strErr = "未加载" + FileName + "文件";
return null;
}
XmlNodeList nodelist = parentNode.ChildNodes;
return nodelist;
}
catch (Exception ex)
{
strErr = ex.Message;
return null;
}
}
/// <summary>
/// 获取节点属性名称
/// </summary>
/// <param name="nodePath">"BookStore/NewBook"</param>
/// <param name="attrName"></param>
public string GetAttributeVal(XmlNode node, string attrName, ref string strErr)
{
strErr = "";
string attrVal = "";
try
{
XmlElement elem = (XmlElement)node;
attrVal = elem.GetAttribute(attrName);
return attrVal;
}
catch (Exception ex)
{
strErr = ex.Message;
return attrVal;
}
}
#endregion
}