欢迎莅临 SUN WU GANG 的园子!!!

世上无难事,只畏有心人。有心之人,即立志之坚午也,志坚则不畏事之不成。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace ZB.QueueSystem.Common
{
    /// <summary>
    /// 用于XML操作
    /// </summary>
    public class XmlHelper
    {
        private static XmlHelper instance;
        public static XmlHelper Instance
        {
            get
            {
                if (instance == null) instance = new XmlHelper();
                return XmlHelper.instance;
            }
        }

        /// <summary>
        /// 根据路径、节点、属性获取属性对应的值
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="nodeName">节点路径,eg:root//am</param>
        /// <param name="attributeName">属性名称</param>
        /// <returns>属性值</returns>
        public string GetAttributeValueByXmlNode(string path, string nodeName, string attributeName)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(path);

            XmlNode node = doc.SelectSingleNode(nodeName);
            return node.Attributes[attributeName].Value;
        }

        /// <summary>
        /// 根据路径、节点、属性设置属性对应的值
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="nodeName">节点路径,eg:root//am</param>
        /// <param name="attributeName">属性名称</param>
        /// <param name="attValue">属性值</param>
        public void SetAttributeValueByXmlNode(string path, string nodeName,
            string attributeName, string attValue)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(path);

            XmlNode node = doc.SelectSingleNode(nodeName);
            node.Attributes[attributeName].Value = attValue;
            doc.Save(path);
        }

        /// <summary>
        /// 获取指定节点子节点指定属性的值
        /// </summary>
        /// <param name="filePath">文件路径</param>
        /// <param name="nodePath">节点</param>
        /// <param name="attribute">属性名称</param>
        /// <returns>List<string>value属性的值</returns>
        public List<string> GetNodeItemAttValue(string path, string nodePath, string attribute)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(path);
            XmlNode node = doc.SelectSingleNode(nodePath);
            string value = string.Empty;
            List<string> list = new List<string>();
            foreach (XmlNode item in node)
            {
                value = item.Attributes[attribute].Value;
                // if (string.IsNullOrEmpty(value)) continue;

                list.Add(value);
            }

            return list;
        }

        /// <summary>
        /// 获取config.xml文件root/am或者root/pm节点下item节点对应属性集合
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="nodePath">节点路径</param>
        /// <returns>List<ConfigItem></returns>
        public List<ConfigItem> GetNodeItemList(string path, string nodePath)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(path);
            XmlNode node = doc.SelectSingleNode(nodePath);
            string value = string.Empty;
            List<ConfigItem> list = new List<ConfigItem>();
            foreach (XmlNode item in node)
            {
                ConfigItem config = new ConfigItem();
                config.Content = item.Attributes["content"].Value;
                config.BeginCode = item.Attributes["begincode"].Value;
                config.EndCode = item.Attributes["endcode"].Value;

                list.Add(config);
            }

            return list;
        }

        /// <summary>
        /// 删除指定节点的子节点
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="nodePath">节点路径</param>
        /// <returns></returns>
        public bool RemoveNodeByNode(string path, string nodePath) 
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(path);

            XmlNode node = doc.SelectSingleNode(nodePath);
            node.InnerText = string.Empty;
            doc.Save(path);

            return true;
        }

        /// <summary>
        /// 添加节点
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="nodePath">节点路径</param>
        /// <param name="items">List<ConfigItem> items</param>
        /// <returns></returns>
        public bool AddNodeByNode(string path, string nodePath, List<ConfigItem> items)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(path);

            XmlNode node = doc.SelectSingleNode(nodePath);
            foreach (ConfigItem item in items)
            {
                XmlElement element = doc.CreateElement("item");
                element.SetAttribute("content",item.Content);
                element.SetAttribute("begincode", item.BeginCode);
                element.SetAttribute("endcode", item.EndCode);

                node.AppendChild(element);
            }

            doc.Save(path);

            return true;
        }

        /// <summary>
        /// 对指定节点内容进行替换
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="nodePath">节点路径</param>
        /// <param name="items">List<ConfigItem> items</param>
        /// <returns></returns>
        public bool ResetNodeByNode(string path, string nodePath, List<ConfigItem> items)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(path);

            XmlNode node = doc.SelectSingleNode(nodePath);
            node.InnerText = string.Empty;

            foreach (ConfigItem item in items)
            {
                XmlElement element = doc.CreateElement("item");
                element.SetAttribute("content", item.Content);
                element.SetAttribute("begincode", item.BeginCode);
                element.SetAttribute("endcode", item.EndCode);

                node.AppendChild(element);
            }

            doc.Save(path);

            return true;
        }
    }

    /// <summary>
    /// config.xml item节点属性描述
    /// </summary>
    public class ConfigItem
    {
        public string Content { get; set; }
        public string BeginCode { get; set; }
        public string EndCode { get; set; }
    }
}

  

<?xml version="1.0" encoding="utf-8"?>
<root>
<test begintime="8" endtime="12" colcount="15" codecount="100">
    <item content=" 08:00-09:00" begincode="1" endcode="25"/>
    <item content=" 09:00-10:00" begincode="25" endcode="50"/>
    <item content=" 10:00-11:00" begincode="50" endcode="75"/>
    <item content=" 11:00-12:00" begincode="75" endcode="100"/>
  </test>
</root>

 

posted on 2017-07-17 17:12  sunwugang  阅读(272)  评论(0编辑  收藏  举报