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>