XML文档操作工具类

  1 /// <summary>
  2 /// XML文档操作工具类
  3 /// </summary>
  4 public class XmlUtil
  5 {
  6     #region XML文档节点查询和读取
  7
  8     /// <summary>
  9     /// 选择匹配XPath表达式的第一个节点XmlNode.
 10     /// </summary>
 11     /// <param name="xmlDoc">XML文档</param>
 12     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
 13     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名")</param>
 14     /// <returns>返回XmlNode</returns>
 15     public static XmlNode GetXmlNodeByXpath(XmlDocument xmlDoc, string xpath)
 16     {
 17         try
 18         {
 19             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
 20             return xmlNode;
 21         }
 22         catch (Exception ex)
 23         {
 24             throw ex; //这里可以定义你自己的异常处理
 25         }
 26     }
 27
 28     /// <summary>
 29     /// 选择匹配XPath表达式的节点列表XmlNodeList.
 30     /// </summary>
 31     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
 32     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名")</param>
 33     /// <returns>返回XmlNodeList</returns>
 34     public static XmlNodeList GetXmlNodeListByXpath(XmlDocument xmlDoc, string xpath)
 35     {
 36         try
 37         {
 38             XmlNodeList xmlNodeList = xmlDoc.SelectNodes(xpath);
 39             return xmlNodeList;
 40         }
 41         catch (Exception ex)
 42         {
 43             throw ex; //这里可以定义你自己的异常处理
 44         }
 45     }
 46
 47     /// <summary>
 48     /// 选择匹配XPath表达式的第一个节点的匹配xmlAttributeName的属性XmlAttribute.
 49     /// </summary>
 50     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
 51     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
 52     /// <param name="xmlAttributeName">要匹配xmlAttributeName的属性名称,默认为value</param>
 53     /// <returns>返回xmlAttributeName</returns>
 54     public static XmlAttribute GetXmlAttribute(XmlDocument xmlDoc, string xpath, params string[] xmlAttributeName)
 55     {
 56         string content = string.Empty;
 57         XmlAttribute xmlAttribute = null;
 58         try
 59         {
 60             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
 61             if (xmlNode != null)
 62             {
 63                 if (xmlNode.Attributes.Count > 0)
 64                 {
 65                     if (int.Equals(xmlAttributeName.Length, 0))
 66                         xmlAttribute = xmlNode.Attributes["value"];
 67                     else
 68                         xmlAttribute = xmlNode.Attributes[xmlAttributeName[0]];
 69                 }
 70             }
 71         }
 72         catch (Exception ex)
 73         {
 74             throw ex; //这里可以定义你自己的异常处理
 75         }
 76         return xmlAttribute;
 77     }
 78
 79     #endregion
 80
 81     #region XML文档创建和节点或属性的添加、修改
 82
 83     /// <summary>
 84     /// 创建一个XML文档
 85     /// </summary>
 86     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
 87     /// <param name="rootNodeName">XML文档根节点名称(须指定一个根节点名称)</param>
 88     /// <param name="version">XML文档信息量(必须为:"1.0")</param>
 89     /// <param name="encoding">XML文档编码方式</param>
 90     /// <param name="standalone">该值必须是"yes"或"no",如果为null,Save方法不在XML声明上写出独立属性</param>
 91     /// <returns>成功返回true,失败返回false</returns>
 92     public static bool CreateXmlDocument(string xmlFileName, string rootNodeName, string version, string encoding, string standalone)
 93     {
 94         bool isSuccess = false;
 95         try
 96         {
 97             XmlDocument xmlDoc = new XmlDocument();
 98             XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration(version, encoding, standalone);
 99             XmlNode root = xmlDoc.CreateElement(rootNodeName);
100             xmlDoc.AppendChild(xmlDeclaration);
101             xmlDoc.AppendChild(root);
102             xmlDoc.Save(xmlFileName);
103             isSuccess = true;
104         }
105         catch (Exception ex)
106         {
107             throw ex; //这里可以定义你自己的异常处理
108         }
109         return isSuccess;
110     }
111
112     /// <summary>
113     /// 依据匹配XPath表达式的第一个节点来创建它的子节点(如果此节点已存在则追加一个新的同名节点
114     /// </summary>
115     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
116     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
117     /// <param name="xmlNodeName">要匹配xmlNodeName的节点名称</param>
118     /// <param name="innerText">节点文本值</param>
119     /// <param name="xmlAttributeName">要匹配xmlAttributeName的属性名称集合</param>
120     /// <param name="value">属性值集合</param>
121     /// <returns>成功返回true,失败返回false</returns>
122     public static bool CreateXmlNodeByXPath(string xmlFileName, string xpath, string xmlNodeName, string innerText, string[] xmlAttributeName, string[] value)
123     {
124         bool isSuccess = false;
125         XmlDocument xmlDoc = new XmlDocument();
126         try
127         {
128             xmlDoc.Load(xmlFileName); //加载XML文档
129             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
130             if (xmlNode != null)
131             {
132                 //存不存在此节点都创建
133                 XmlElement subElement = xmlDoc.CreateElement(xmlNodeName);
134                 subElement.InnerXml = innerText;
135
136                 //如果属性和值参数都不为空则在此新节点上新增属性
137                 if (xmlAttributeName != null && value != null)
138                 {
139                     for (int i = 0; i < xmlAttributeName.Length; i++)
140                     {
141                         XmlAttribute xmlAttribute = xmlDoc.CreateAttribute(xmlAttributeName[i]);
142                         xmlAttribute.Value = value[i];
143                         subElement.Attributes.Append(xmlAttribute);
144                     }
145                 }
146                 xmlNode.AppendChild(subElement);
147             }
148             xmlDoc.Save(xmlFileName); //保存到XML文档
149             isSuccess = true;
150         }
151         catch (Exception ex)
152         {
153             throw ex; //这里可以定义你自己的异常处理
154         }
155         return isSuccess;
156     }
157
158     /// <summary>
159     /// 依据匹配XPath表达式的第一个节点来创建或更新它的子节点(如果节点存在则更新,不存在则创建)
160     /// </summary>
161     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
162     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
163     /// <param name="xmlNodeName">要匹配xmlNodeName的节点名称</param>
164     /// <param name="innerText">节点文本值</param>
165     /// <returns>成功返回true,失败返回false</returns>
166     public static bool CreateOrUpdateXmlNodeByXPath(string xmlFileName, string xpath, string xmlNodeName, string innerText)
167     {
168         bool isSuccess = false;
169         bool isExistsNode = false;//标识节点是否存在
170         XmlDocument xmlDoc = new XmlDocument();
171         try
172         {
173             xmlDoc.Load(xmlFileName); //加载XML文档
174             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
175             if (xmlNode != null)
176             {
177                 //遍历xpath节点下的所有子节点
178                 foreach (XmlNode node in xmlNode.ChildNodes)
179                 {
180                     if (node.Name.ToLower() == xmlNodeName.ToLower())
181                     {
182                         //存在此节点则更新
183                         node.InnerXml = innerText;
184                         isExistsNode = true;
185                         break;
186                     }
187                 }
188                 if (!isExistsNode)
189                 {
190                     //不存在此节点则创建
191                     XmlElement subElement = xmlDoc.CreateElement(xmlNodeName);
192                     subElement.InnerXml = innerText;
193                     xmlNode.AppendChild(subElement);
194                 }
195             }
196             xmlDoc.Save(xmlFileName); //保存到XML文档
197             isSuccess = true;
198         }
199         catch (Exception ex)
200         {
201             throw ex; //这里可以定义你自己的异常处理
202         }
203         return isSuccess;
204     }
205
206     /// <summary>
207     /// 依据匹配XPath表达式的第一个节点来创建或更新它的属性(如果属性存在则更新,不存在则创建)
208     /// </summary>
209     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
210     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
211     /// <param name="xmlAttributeName">要匹配xmlAttributeName的属性名称</param>
212     /// <param name="value">属性值</param>
213     /// <returns>成功返回true,失败返回false</returns>
214     public static bool CreateOrUpdateXmlAttributeByXPath(string xmlFileName, string xpath, string value, params string[] xmlAttributeNamePara)
215     {
216         bool isSuccess = false;
217         bool isExistsAttribute = false;//标识属性是否存在
218         XmlDocument xmlDoc = new XmlDocument();
219         try
220         {
221             xmlDoc.Load(xmlFileName); //加载XML文档
222             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
223             if (xmlNode != null)
224             {
225                 //默认为value
226                 string xmlAttributeName = "value";
227                 if (xmlAttributeNamePara.Length > 0)
228                 {
229                     xmlAttributeName = xmlAttributeNamePara[0];
230                 }
231                 //遍历xpath节点中的所有属性
232                 foreach (XmlAttribute attribute in xmlNode.Attributes)
233                 {
234                     if (attribute.Name.ToLower() == xmlAttributeName.ToLower())
235                     {
236                         //节点中存在此属性则更新
237                         attribute.Value = value;
238                         isExistsAttribute = true;
239                         break;
240                     }
241                 }
242                 if (!isExistsAttribute)
243                 {
244                     //节点中不存在此属性则创建
245                     XmlAttribute xmlAttribute = xmlDoc.CreateAttribute(xmlAttributeName);
246                     xmlAttribute.Value = value;
247                     xmlNode.Attributes.Append(xmlAttribute);
248                 }
249             }
250             xmlDoc.Save(xmlFileName); //保存到XML文档
251             isSuccess = true;
252         }
253         catch (Exception ex)
254         {
255             throw ex; //这里可以定义你自己的异常处理
256         }
257         return isSuccess;
258     }
259
260     #endregion
261
262     #region XML文档节点或属性的删除
263
264     /// <summary>
265     /// 删除匹配XPath表达式的第一个节点(节点中的子元素同时会被删除)
266     /// </summary>
267     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
268     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
269     /// <returns>成功返回true,失败返回false</returns>
270     public static bool DeleteXmlNodeByXPath(string xmlFileName, string xpath)
271     {
272         bool isSuccess = false;
273         XmlDocument xmlDoc = new XmlDocument();
274         try
275         {
276             xmlDoc.Load(xmlFileName); //加载XML文档
277             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
278             if (xmlNode != null)
279             {
280                 //删除节点
281                 xmlNode.ParentNode.RemoveChild(xmlNode);
282             }
283             xmlDoc.Save(xmlFileName); //保存到XML文档
284             isSuccess = true;
285         }
286         catch (Exception ex)
287         {
288             throw ex; //这里可以定义你自己的异常处理
289         }
290         return isSuccess;
291     }
292
293     /// <summary>
294     /// 删除匹配XPath表达式的第一个节点中的匹配参数xmlAttributeName的属性
295     /// </summary>
296     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
297     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
298     /// <param name="xmlAttributeName">要删除的xmlAttributeName的属性名称</param>
299     /// <returns>成功返回true,失败返回false</returns>
300     public static bool DeleteXmlAttributeByXPath(string xmlFileName, string xpath, string xmlAttributeName)
301     {
302         bool isSuccess = false;
303         bool isExistsAttribute = false;
304         XmlDocument xmlDoc = new XmlDocument();
305         try
306         {
307             xmlDoc.Load(xmlFileName); //加载XML文档
308             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
309             XmlAttribute xmlAttribute = null;
310             if (xmlNode != null)
311             {
312                 //遍历xpath节点中的所有属性
313                 foreach (XmlAttribute attribute in xmlNode.Attributes)
314                 {
315                     if (attribute.Name.ToLower() == xmlAttributeName.ToLower())
316                     {
317                         //节点中存在此属性
318                         xmlAttribute = attribute;
319                         isExistsAttribute = true;
320                         break;
321                     }
322                 }
323                 if (isExistsAttribute)
324                 {
325                     //删除节点中的属性
326                     xmlNode.Attributes.Remove(xmlAttribute);
327                 }
328             }
329             xmlDoc.Save(xmlFileName); //保存到XML文档
330             isSuccess = true;
331         }
332         catch (Exception ex)
333         {
334             throw ex; //这里可以定义你自己的异常处理
335         }
336         return isSuccess;
337     }
338
339     /// <summary>
340     /// 删除匹配XPath表达式的第一个节点中的所有属性
341     /// </summary>
342     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
343     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
344     /// <returns>成功返回true,失败返回false</returns>
345     public static bool DeleteAllXmlAttributeByXPath(string xmlFileName, string xpath)
346     {
347         bool isSuccess = false;
348         XmlDocument xmlDoc = new XmlDocument();
349         try
350         {
351             xmlDoc.Load(xmlFileName); //加载XML文档
352             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
353             if (xmlNode != null)
354             {
355                 //遍历xpath节点中的所有属性
356                 xmlNode.Attributes.RemoveAll();
357             }
358             xmlDoc.Save(xmlFileName); //保存到XML文档
359             isSuccess = true;
360         }
361         catch (Exception ex)
362         {
363             throw ex; //这里可以定义你自己的异常处理
364         }
365         return isSuccess;
366     }
367
368     #endregion
369 }
时间: 2024-10-13 04:01:20

XML文档操作工具类的相关文章

XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)

以下是代码: using System;using System.Collections.Generic;using System.Linq;using System.Web; using System.Xml; namespace WebApplication2{ /// <summary>    /// XMLHelper XML文档操作管理器    /// </summary>    public class XMLHelper    {        public XMLH

关于XML文档操作类

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Xml; 6 7 namespace ZW.ClassLibrary 8 { 9 public class XmlHelpers 10 { 11 /// <summary> 12 /// XML文档 13 /// </summary> 14 XmlDocument x

文档对象模型操作xml文档

简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规范化接口.DOM是表示文档(比如HTML和XML)和访问.操作构成文档的各种元素的应用程序接口,它以树状结构表示HTML和XML文档,定义了遍历这个树和检查.修改树的节点的方法和属性. DOM的核心API还允许你创建和填充文件.加载文档并保存. 2.2DOM实现 微软的net框架在Systemx.x

自定义工具类---XML文档读取工具类

此类用于对XML文档的读和写进行集成 package cn.jamsbwo.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.UnsupportedEncodingException; import org.dom4j.Document; import org.dom4j.DocumentException; import

四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点]      ①允许应用

JAVA对象和XML文档、原来他们之间还有这一出

最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是 通过socket发送xml格式的报文到指定服务器来进行信息的统一认证.. 因此组装xml格式的报文字符串以及解析服务器返回的xml格式的字符获得所需数据成了 解决问题的关键..在这之前,以为会有点难...做完之后,然并卵,也就那么一回事... LZ主要用的xStream类..这个类的完美地解决了XML文档和JAVA对象之间的转换.. 由于刚刚接触这个类...对于里面提供的很多功能还没细细挖掘..只是简单地实现了 我想要实现的

浅谈用java解析xml文档(四)

继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使用dom4j解析,个人认为是四种解析方式里面最方便的一种,DOM4J是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件.如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用D

.Net中使用xsd验证xml文档

在.NET中使用XSD可以方便的验证一个XML文档是否符合规范.这里的XSD本质上是一个xml文件,XSD相当于数据库中的表结构或者C#语言中的一个抽象类,它规定了被验证的目标xml的结构,如目标xml具有哪些节点,每个节点的顺序关系,每个节点的数据类型,每个节点的出现次数等信息. .NET中通过XmlReader和XmlReaderSettrings类可以方便的对XML进行验证,示例代码如下: 1         static void Main(string[] args) 2 { 3 //

用C#读取XML文档

本文将以一个非常简单的例子来说明如何使用C#访问一个XML文件并且读取其中的信息.例子本身并无任何实际意义,它只是简单的介绍了如何调用微软的XML标准以及如何运用到实际当中去.希望能够对初次接触C#或者未尝试过通过C#读取XML文件的读者有所启发.本文旨在抛砖引玉,希望能与更多的朋友交流和分享经验.    制作过程 1. 运行Visual Studio.NET,新建Visual C#.NET工程,这里取名为ReadXML. 2. 在解决方案资源管理器中,将Form1.cs改名为frmAuthor