1 using System; 2 using System.Collections.Generic; 3 4 //用KVP来代替KeyValuePair<string,string>;相当于C中的typedef 5 using KVP = System.Collections.Generic.KeyValuePair<string,string>; 6 using System.Linq; 7 using System.Text; 8 using System.Xml.Linq; 9 using System.IO; 10 using System.Collections; 11 12 namespace Helper 13 { 14 class xmlHelper 15 { 16 public xmlHelper() 17 { } 18 19 #region 创建XML 20 /// <summary> 21 /// 创建XML, 22 /// 首先根据要创建的路径是否有要创建的xml文档, 23 /// 若有,则不做操作直接返回。 24 /// 若无,则按要求新建XML文档。 25 /// </summary> 26 /// <param name="xmlPath">xml所在路径(不包含文件名)</param> 27 /// <param name="xmlName">xml文件名</param> 28 /// <param name="declaration">新建xml的声明(XDeclaration类型)</param> 29 /// <param name="comment">新建xml的注释(XComment类型)</param> 30 /// <param name="element">新建xml节点(XElement类型),可多个节点嵌套</param> 31 public static void creatXML(string xmlPath,string xmlName,XDeclaration declaration,XComment comment,XElement element) 32 { 33 //将xml文件夹路径和xml文件名合成完整路径 34 string path = Path.Combine(xmlPath,xmlName); 35 //判断文件是否存在 36 //若存在则返回 37 //若不存在则按要求新建 38 if (File.Exists(path)) 39 { 40 return; 41 } 42 else 43 { 44 XDocument doc = new XDocument( 45 declaration, 46 comment, 47 element 48 ); 49 doc.Save(path); 50 } 51 } 52 /// <summary> 53 /// 创建XML, 54 /// 首先根据要创建的路径是否有要创建的xml文档, 55 /// 若有,则不做操作直接返回。 56 /// 若无,则按要求新建XML文档。 57 /// 默认version="1.0",encoding="utf-8",standalone="yes" 58 /// </summary> 59 /// <param name="xmlPath">xml所在路径(不包含文件名)</param> 60 /// <param name="xmlName">xml文件名</param> 61 /// <param name="comment">新建xml的注释(XComment类型)</param> 62 /// <param name="element">新建xml节点(XElement类型),可多个节点嵌套</param> 63 public static void creatXML(string xmlPath, string xmlName,XComment comment,XElement element) 64 { 65 //将xml文件夹路径和xml文件名合成完整路径 66 string path = Path.Combine(xmlPath, xmlName); 67 //判断文件是否存在 68 //若存在则返回 69 //若不存在则按要求新建 70 if (File.Exists(path)) 71 { 72 return; 73 } 74 else 75 { 76 XDocument doc = new XDocument( 77 new XDeclaration("1.0","utf-8","yes"), 78 comment, 79 element 80 ); 81 doc.Save(path); 82 } 83 } 84 85 #endregion 86 87 #region 查询XML 88 /// <summary> 89 /// 根据节点名称查询 90 /// </summary> 91 /// <param name="xmlPath">文件所在位置的路径(包括文件名)</param> 92 /// <param name="NodeName">所要查询的节点名称</param> 93 /// <returns>返回所有节点的泛型集合(List类型)</returns> 94 public static List<XElement> Query(string xmlPath,string NodeName) 95 { 96 XElement xel = XElement.Load(xmlPath); 97 List<XElement> list = new List<XElement>(); 98 var elements = from el in xel.Descendants(NodeName) select el; 99 foreach (XElement e in elements) 100 { 101 list.Add(e); 102 } 103 return list; 104 } 105 /// <summary> 106 /// 根据节点名称和属性查询特定节点 107 /// </summary> 108 /// <param name="xmlPath">文件所在位置的路径(包括文件名)</param> 109 /// <param name="NodeName">所要查询的节点名称</param> 110 /// <param name="ATT">所要查询的节点的属性名称及值KeyValuePair(属性名称,属性值)</param> 111 /// <returns>返回符合条件的xml元素集合</returns> 112 public static List<XElement> Query(string xmlPath, string NodeName,KVP ATT) 113 { 114 XElement xel = XElement.Load(xmlPath); 115 List<XElement> list = new List<XElement>(); 116 var elements = from el in xel.Descendants(NodeName) 117 where el.Attribute(ATT.Key).Value == ATT.Value 118 select el; 119 foreach (XElement e in elements) 120 { 121 list.Add(e); 122 } 123 return list; 124 } 125 #endregion 126 127 #region 添加节点 128 /// <summary> 129 /// 插入节点 130 /// </summary> 131 /// <param name="xmlPath">文件所在位置的路径(包括文件名)</param> 132 /// <param name="FatherNodeName">所要插入节点的父节点名称</param> 133 /// <param name="FatherNodeAttribute">所要插入节点的父节点属性名称及值KeyValuePair(属性名称,属性值)</param> 134 /// <param name="NewNode">要插入的新节点(XElement)</param> 135 public static void InsertNode(string xmlPath,string FatherNodeName, 136 KVP FatherNodeAttribute,XElement NewNode) 137 { 138 XElement xel = XElement.Load(xmlPath); 139 var elements = from el in xel.Descendants(FatherNodeName) 140 where el.Attribute(FatherNodeAttribute.Key).Value == FatherNodeAttribute.Value 141 select el; 142 foreach (XElement e in elements) 143 { 144 e.Add(NewNode); 145 } 146 xel.Save(xmlPath); 147 } 148 149 #endregion 150 151 #region 修改节点 152 /// <summary> 153 /// 修改指定节点的内容 154 /// </summary> 155 /// <param name="xmlPath">文件所在位置的路径(包括文件名)</param> 156 /// <param name="NodeName">要修改的节点名称</param> 157 /// <param name="ATT">要修改的节点的属性名及值(根据此属性名确定具体要修改哪一个节点)KeyValuePair(属性名称,属性值)</param> 158 /// <param name="NewAtt">要修改的子元素名称及值KeyValuePair(子元素名,子元素值)</param> 159 public static void Modify(string xmlPath,string NodeName,KVP ATT,KVP NewAtt) 160 { 161 XElement xel = XElement.Load(xmlPath); 162 var elements = from el in xel.Descendants(NodeName) 163 where el.Attribute(ATT.Key).Value == ATT.Value 164 select el; 165 foreach (XElement e in elements) 166 { 167 e.Element(NewAtt.Key).SetValue(NewAtt.Value); 168 } 169 xel.Save(xmlPath); 170 } 171 #endregion 172 } 173 }
时间: 2024-10-10 22:16:42