(三)XmlHelper

【转】http://blog.csdn.net/u011866450/article/details/50373222

  1 using System.Xml;
  2 using System.Data;
  3 namespace DotNet.Utilities
  4 {
  5     /// <summary>
  6     /// Xml的操作公共类
  7     /// </summary>    
  8     public class XmlHelper
  9     {
 10         #region 字段定义
 11         /// <summary>
 12         /// XML文件的物理路径
 13         /// </summary>
 14         private string _filePath = string.Empty;
 15         /// <summary>
 16         /// Xml文档
 17         /// </summary>
 18         private XmlDocument _xml;
 19         /// <summary>
 20         /// XML的根节点
 21         /// </summary>
 22         private XmlElement _element;
 23         #endregion
 24         #region 构造方法
 25         /// <summary>
 26         /// 实例化XmlHelper对象
 27         /// </summary>
 28         /// <param name="xmlFilePath">Xml文件的相对路径</param>
 29         public XmlHelper(string xmlFilePath)
 30         {
 31             //获取XML文件的绝对路径
 32             _filePath = SysHelper.GetPath(xmlFilePath);
 33         }
 34         #endregion
 35         #region 创建XML的根节点
 36         /// <summary>
 37         /// 创建XML的根节点
 38         /// </summary>
 39         private void CreateXMLElement()
 40         {
 41             //创建一个XML对象
 42             _xml = new XmlDocument();
 43             if (DirFile.IsExistFile(_filePath))
 44             {
 45                 //加载XML文件
 46                 _xml.Load(this._filePath);
 47             }
 48             //为XML的根节点赋值
 49             _element = _xml.DocumentElement;
 50         }
 51         #endregion
 52         #region 获取指定XPath表达式的节点对象
 53         /// <summary>
 54         /// 获取指定XPath表达式的节点对象
 55         /// </summary>        
 56         /// <param name="xPath">XPath表达式,
 57         /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
 58         /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
 59         /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
 60         /// </param>
 61         public XmlNode GetNode(string xPath)
 62         {
 63             //创建XML的根节点
 64             CreateXMLElement();
 65             //返回XPath节点
 66             return _element.SelectSingleNode(xPath);
 67         }
 68         #endregion
 69         #region 获取指定XPath表达式节点的值
 70         /// <summary>
 71         /// 获取指定XPath表达式节点的值
 72         /// </summary>
 73         /// <param name="xPath">XPath表达式,
 74         /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
 75         /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
 76         /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
 77         /// </param>
 78         public string GetValue(string xPath)
 79         {
 80             //创建XML的根节点
 81             CreateXMLElement();
 82             //返回XPath节点的值
 83             return _element.SelectSingleNode(xPath).InnerText;
 84         }
 85         #endregion
 86         #region 获取指定XPath表达式节点的属性值
 87         /// <summary>
 88         /// 获取指定XPath表达式节点的属性值
 89         /// </summary>
 90         /// <param name="xPath">XPath表达式,
 91         /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
 92         /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
 93         /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
 94         /// </param>
 95         /// <param name="attributeName">属性名</param>
 96         public string GetAttributeValue(string xPath, string attributeName)
 97         {
 98             //创建XML的根节点
 99             CreateXMLElement();
100             //返回XPath节点的属性值
101             return _element.SelectSingleNode(xPath).Attributes[attributeName].Value;
102         }
103         #endregion
104         #region 新增节点
105         /// <summary>
106         /// 1. 功能:新增节点。
107         /// 2. 使用条件:将任意节点插入到当前Xml文件中。
108         /// </summary>        
109         /// <param name="xmlNode">要插入的Xml节点</param>
110         public void AppendNode(XmlNode xmlNode)
111         {
112             //创建XML的根节点
113             CreateXMLElement();
114             //导入节点
115             XmlNode node = _xml.ImportNode(xmlNode, true);
116             //将节点插入到根节点下
117             _element.AppendChild(node);
118         }
119         /// <summary>
120         /// 1. 功能:新增节点。
121         /// 2. 使用条件:将DataSet中的第一条记录插入Xml文件中。
122         /// </summary>        
123         /// <param name="ds">DataSet的实例,该DataSet中应该只有一条记录</param>
124         public void AppendNode(DataSet ds)
125         {
126             //创建XmlDataDocument对象
127             XmlDataDocument xmlDataDocument = new XmlDataDocument(ds);
128             //导入节点
129             XmlNode node = xmlDataDocument.DocumentElement.FirstChild;
130             //将节点插入到根节点下
131             AppendNode(node);
132         }
133         #endregion
134         #region 删除节点
135         /// <summary>
136         /// 删除指定XPath表达式的节点
137         /// </summary>        
138         /// <param name="xPath">XPath表达式,
139         /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
140         /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
141         /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
142         /// </param>
143         public void RemoveNode(string xPath)
144         {
145             //创建XML的根节点
146             CreateXMLElement();
147             //获取要删除的节点
148             XmlNode node = _xml.SelectSingleNode(xPath);
149             //删除节点
150             _element.RemoveChild(node);
151         }
152         #endregion //删除节点
153         #region 保存XML文件
154         /// <summary>
155         /// 保存XML文件
156         /// </summary>        
157         public void Save()
158         {
159             //创建XML的根节点
160             CreateXMLElement();
161             //保存XML文件
162             _xml.Save(this._filePath);
163         }
164         #endregion //保存XML文件
165         #region 静态方法
166         #region 创建根节点对象
167         /// <summary>
168         /// 创建根节点对象
169         /// </summary>
170         /// <param name="xmlFilePath">Xml文件的相对路径</param>        
171         private static XmlElement CreateRootElement(string xmlFilePath)
172         {
173             //定义变量,表示XML文件的绝对路径
174             string filePath = "";
175             //获取XML文件的绝对路径
176             filePath = SysHelper.GetPath(xmlFilePath);
177             //创建XmlDocument对象
178             XmlDocument xmlDocument = new XmlDocument();
179             //加载XML文件
180             xmlDocument.Load(filePath);
181             //返回根节点
182             return xmlDocument.DocumentElement;
183         }
184         #endregion
185         #region 获取指定XPath表达式节点的值
186         /// <summary>
187         /// 获取指定XPath表达式节点的值
188         /// </summary>
189         /// <param name="xmlFilePath">Xml文件的相对路径</param>
190         /// <param name="xPath">XPath表达式,
191         /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
192         /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
193         /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
194         /// </param>
195         public static string GetValue(string xmlFilePath, string xPath)
196         {
197             //创建根对象
198             XmlElement rootElement = CreateRootElement(xmlFilePath);
199             //返回XPath节点的值
200             return rootElement.SelectSingleNode(xPath).InnerText;
201         }
202         #endregion
203         #region 获取指定XPath表达式节点的属性值
204         /// <summary>
205         /// 获取指定XPath表达式节点的属性值
206         /// </summary>
207         /// <param name="xmlFilePath">Xml文件的相对路径</param>
208         /// <param name="xPath">XPath表达式,
209         /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
210         /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
211         /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
212         /// </param>
213         /// <param name="attributeName">属性名</param>
214         public static string GetAttributeValue(string xmlFilePath, string xPath, string attributeName)
215         {
216             //创建根对象
217             XmlElement rootElement = CreateRootElement(xmlFilePath);
218             //返回XPath节点的属性值
219             return rootElement.SelectSingleNode(xPath).Attributes[attributeName].Value;
220         }
221         #endregion
222         #endregion
223         public static void SetValue(string xmlFilePath, string xPath, string newtext)
224         {
225             //string path = SysHelper.GetPath(xmlFilePath);
226             //var queryXML = from xmlLog in xelem.Descendants("msg_log")
227             //               //所有名字为Bin的记录
228             //               where xmlLog.Element("user").Value == "Bin"
229             //               select xmlLog;
230             //foreach (XElement el in queryXML)
231             //{
232             //    el.Element("user").Value = "LiuBin";//开始修改
233             //}
234             //xelem.Save(path);
235         }
236     }
237 }

 

posted @ 2016-12-13 10:11  筱灬湘子  阅读(340)  评论(0编辑  收藏  举报