现有如下的需求,比如一个 设备.xml 文件,里面都是每个设备的信息,当然它们的配置属性都一样,加入用户点击添加一个设备,然后要将用户添加的设备各种信息写入到这个 设备.xml文件中,可能你脑海中第一个想到的是一个一个XmlElement的构造,然后再添加到设备文件中,其实没什么,我最开始也这么想,但是用大腿想想这样的效率和可操作性都很差,特别是当属性增多时效率会很烂
既然它们的属性都一样,这让我想到了c++的模板,以及像诸如smarty,valocity,jstl之类的便签库,其实思想都一样,定义模板,然后动态生成。
好了,有了想法,那就开始吧。这是一个模板xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <测点> 3 <标签></标签> 4 <名称></名称> 5 <描述></描述> 6 <工程单位></工程单位> 7 <显示格式></显示格式> 8 <最大值></最大值> 9 <最小值></最小值> 10 <报警设置 状态=""> 11 <低报 状态=""></低报> 12 <低低报 状态=""></低低报> 13 <高报 状态=""></高报> 14 <高高报 状态=""></高高报> 15 </报警设置> 16 <变量逻辑 索引="0"></变量逻辑> 17 <关联变量> 18 <输入变量1></输入变量1> 19 <输入变量2></输入变量2> 20 <输出变量></输出变量> 21 <常量k></常量k> 22 <常量b></常量b> 23 </关联变量> 24 </测点>
就照这个xml来填充
1 #region 使用xml模板快速添加节点 2 /// <summary> 3 /// 使用了一个xml节点模板,主要用于增加节点 4 /// </summary> 5 /// <param name="xmlpath"></param> 6 /// <param name="tag"></param> 7 /// <param name="name"></param> 8 public static void createBigNode(string xmlpath, string rootpart, string tag, string name) 9 { 10 XmlDocument template = new XmlDocument(); 11 template.Load(xmlpath + "\\template.xml"); 12 XmlNode root = template.DocumentElement; 13 ((XmlElement)root.SelectSingleNode("标签")).InnerText = tag; 14 ((XmlElement)root.SelectSingleNode("名称")).InnerText = name; 15 XmlDocument xmlDoc = new XmlDocument(); 16 xmlDoc.Load(xmlpath + "\\omstag.cfg"); 17 string selectstr = "/ 测点配置 /" + rootpart; 18 XmlNode appendnode = xmlDoc.SelectSingleNode(selectstr); 19 20 appendnode.AppendChild(xmlDoc.ImportNode(root, true)); 21 xmlDoc.Save(xmlpath + "\\omstag.cfg"); 22 23 } 24 #endregion
xmlpath是 模板xml的路径, rootpath是 设备xml的路径
想废话一句,c#操作xml还是使用linq最简便。杠杠地