C#操作XML文件封装类

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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫子不吃鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值