C# XmlHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Data;
using System.IO;

namespace text
{
    public class XmlHelper
    {
        #region  增

        /// <summary>
        /// 新建一個帶有根節點的xml
        /// </summary>
        /// <param name="rootName">根節點名字</param>
        /// <returns></returns>
        public static XmlDocument CreateXml(string rootName)
        {
            XmlDocument xml = new XmlDocument();

            //寫入聲明
            XmlNode node = xml.CreateNode(XmlNodeType.XmlDeclaration, "", "");
            xml.AppendChild(node);

            //增加根節點
            XmlElement rootElement = xml.CreateElement(rootName);
            xml.AppendChild(rootElement);

            return xml;
        }


        /// <summary>
        /// 添加一個父節點到根節點末尾
        /// </summary>
        /// <param name="xml">xml文檔</param>
        /// <param name="parentNodeName">父節點名字</param>
        /// <returns></returns>
        public static void AddParentNode(XmlDocument xml, string parentNodeName)
        {
            XmlElement parentElement = xml.CreateElement(parentNodeName);
            xml.DocumentElement.AppendChild(parentElement);
        }


        /// <summary>
        /// 添加一個新的子節點(包括屬性信息)到指定的節點中
        /// </summary>
        /// <param name="xml">xml文檔</param>
        /// <param name="currentPath">新節點的父節點xPath路徑</param>
        /// <param name="elementName">新節點的名字</param>
        /// <param name="attrib">新節點的屬性名字</param>
        /// <param name="attribContent">新節點的屬性值</param>
        /// <param name="content">新節點值</param>
        /// <returns></returns>
        public static bool AddElement(XmlDocument xml, string currentNodePath, string elementName
                                             , string attrib, string attribContent, string content)
        {
            bool flag = false;
            XmlNode currentNode = xml.SelectSingleNode(currentNodePath);
            if (currentNode != null)
            {
                XmlElement newElement = xml.CreateElement(elementName);
                newElement.SetAttribute(attrib, attribContent);
                newElement.InnerText = content;
                currentNode.AppendChild(newElement);
                flag = true;
            }
            return flag;
        }

        /// <summary>
        /// 添加一個新的子節點(不包括屬性信息)到指定的節點中
        /// </summary>
        /// <param name="xml">xml文檔</param>
        /// <param name="currentNodePath">新節點的父節點xPath路徑</param>
        /// <param name="elementName">新節點名字</param>
        /// <param name="content">新節點值</param>
        /// <returns></returns>
        public static bool AddElement(XmlDocument xml, string currentNodePath, string elementName
                                            , string content)
        {
            bool flag = false;
            XmlNode currentNode = xml.SelectSingleNode(currentNodePath);
            if (currentNode != null)
            {
                XmlElement newElement = xml.CreateElement(elementName);
                newElement.InnerText = content;
                currentNode.AppendChild(newElement);
                flag = true;
            }
            return flag;
        }

        /// <summary>
        /// 向某一節點添加屬性
        /// </summary>
        /// <param name="xml">xml文檔</param>
        /// <param name="currentNodePath">屬性的節點的xPath</param>
        /// <param name="attributeName">屬性名</param>
        /// <param name="attributeValue">屬性值</param>
        /// <returns></returns>
        public static bool AddAttribute(XmlDocument xml, string currentNodePath, string attributeName
                                               , string attributeValue)
        {
            bool flag = false;
            XmlNode currentNode = xml.SelectSingleNode(currentNodePath);
            if (currentNodePath != null)
            {
                XmlAttribute attribute = xml.CreateAttribute(attributeName);  //創建一個新屬性
                currentNode.Attributes.Append(attribute);
                XmlElement currentElement = currentNode as XmlElement;
                currentElement.SetAttribute(attributeName, attributeValue);
                flag = true;
            }
            return flag;
        }

        #endregion

        #region  查

        /// <summary>
        /// 查找指定節點名的節點列表
        /// </summary>
        /// <param name="xml">xml文檔</param>
        /// <param name="nodeName">節點名稱</param>
        /// <returns>符合要求的節點列表</returns>
        public static XmlNodeList QueryNodeList(XmlDocument xml, string nodeName)
        {
            XmlNodeList nodeList = xml.GetElementsByTagName(nodeName);
            if (nodeList.Count != 0)
            {
                return nodeList;
            }
            return null;
        }

        /// <summary>
        /// 查找指定節點的指定屬性值
        /// </summary>
        /// <param name="xml">xml文檔</param>
        /// <param name="nodePath">節點的xPath路徑,必須是獨一無二的。如果有多個則只返回第一個</param>
        /// <param name="attributeName">要查詢的屬性</param>
        /// <returns></returns>
        public static string QueryAttribute(XmlDocument xml, string nodePath, string attributeName)
        {
            string res = null;
            XmlNode currentNode = xml.SelectSingleNode(nodePath);
            if (currentNode != null)
            {
                XmlAttributeCollection xac = currentNode.Attributes;  //當前節點的屬性集合
                for (int i = 0; i < xac.Count; i++)
                {
                    if (xac[i].Name == attributeName)
                    {
                        res = xac[i].Value;
                        break;
                    }
                }
            }
            return res;
        }

        /// <summary>
        /// 查找指定節點的值
        /// </summary>
        /// <param name="xml">xml文檔</param>
        /// <param name="nodepath">節點的xPath路徑,必須是獨一無二的。如果有多個則只返回第一個</param>
        /// <returns></returns>
        public static string QueryNode(XmlDocument xml, string nodepath)
        {
            string res = null;
            XmlNode currentNode = xml.SelectSingleNode(nodepath);
            if (currentNode != null)
            {
                res = currentNode.InnerText;
            }
            return res;
        }

        #endregion

        #region 存

        public static void Save(XmlDocument xml, string path)
        {
            xml.Save(path);
        }

        #endregion

    
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章