首页 > 编程 > C# > 正文

基于C#实现XML文件读取工具类

2019-10-29 21:41:30
字体:
来源:转载
供稿:网友

这篇文章主要介绍了基于C#实现XML文件读取工具类,涉及C#针对XML文件各节点获取的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了基于C#实现XML文件读取工具类。分享给大家供大家参考。具体如下:

这是我去年写的一个XML文件读取工具类,现在做了一些调整

基本能满足一般的XML文件读取需求。

更新:

2013年6月26日19:37 Fix了几个Bug,为所有方法添加单元测试,并运行通过;同时调整了几个方法的位置。

 

 
  1. /// <summary> 
  2. /// Author: jiangxiaoqiang 
  3. /// </summary> 
  4. public class XmlReader 
  5. //========================================================= // 
  6. #region 获取XmlDocument对象 
  7. /// <summary> 
  8. /// 根据XML文件内容获取XmlDocument对象 
  9. /// </summary> 
  10. /// <param name="xmlFileContent"></param> 
  11. /// <returns></returns> 
  12. public static XmlDocument GetXmlDocByXmlContent(string xmlFileContent) 
  13. if (string.IsNullOrEmpty(xmlFileContent)) 
  14. return null
  15. var xDoc = new XmlDocument(); 
  16. try 
  17. xDoc.LoadXml(xmlFileContent); 
  18. catch 
  19. xDoc = null
  20. return xDoc; 
  21. /// <summary> 
  22. /// 根据XML文件路径获取XmlDocument对象 
  23. /// </summary> 
  24. /// <param name="xmlFilePath"></param> 
  25. /// <returns></returns> 
  26. public static XmlDocument GetXmlDocByFilePath(string xmlFilePath) 
  27. if (string.IsNullOrEmpty(xmlFilePath) || !File.Exists(xmlFilePath)) 
  28. return null
  29. var xDoc = new XmlDocument(); 
  30. try 
  31. xDoc.Load(xmlFilePath); 
  32. catch 
  33. throw new Exception(string.Format("请确认该XML文件格式正确,路径为:{0}", xmlFilePath)); 
  34. return xDoc; 
  35. #endregion 
  36. //========================================================= // 
  37. //========================================================= // 
  38. #region 获取XML节点(或节点列表) 
  39. /// <summary> 
  40. /// 获取父节点下指定节点名称的第一个子节点 
  41. /// </summary> 
  42. /// <param name="parentXmlNode"></param> 
  43. /// <param name="childNodeName"></param> 
  44. /// <returns></returns> 
  45. public static XmlNode GetFirstChildNodeByName(XmlNode parentXmlNode, string childNodeName) 
  46. var childXmlNodes = GetChildNodesByName(parentXmlNode, childNodeName); 
  47. if (childXmlNodes != null && childXmlNodes.Count > 0) 
  48. return childXmlNodes[0]; 
  49. return null
  50. /// <summary> 
  51. /// 获取父节点下指定节点名称的子节点列表 
  52. /// </summary> 
  53. /// <param name="parentXmlNode">父节点</param> 
  54. /// <param name="nodeName">节点名称</param> 
  55. /// <returns></returns> 
  56. public static XmlNodeList GetChildNodesByName(XmlNode parentXmlNode, string nodeName) 
  57. if (parentXmlNode == null || string.IsNullOrEmpty(nodeName)) 
  58. return null
  59. return GetChildNodesByXPathExpr(parentXmlNode, string.Format(".//{0}", nodeName)); 
  60. /// <summary> 
  61. /// 获取父节点下满足xpathExpr表达式的XML子节点列表 
  62. /// </summary> 
  63. /// <param name="parentXmlNode">父节点</param> 
  64. /// <param name="xpathExpr"></param> 
  65. /// <returns></returns>  
  66. public static XmlNodeList GetChildNodesByXPathExpr(XmlNode parentXmlNode, string xpathExpr) 
  67. if (parentXmlNode == null || string.IsNullOrEmpty(xpathExpr)) 
  68. return null
  69. return parentXmlNode.SelectNodes(xpathExpr); 
  70. /// <summary> 
  71. /// 获取父节点下的第一个子节点 
  72. /// </summary> 
  73. /// <param name="parentXmlNode"></param> 
  74. /// <returns></returns> 
  75. public static XmlNode GetFirstChildNode(XmlNode parentXmlNode) 
  76. var childXmlNodes = GetChildNodes(parentXmlNode); 
  77. if (childXmlNodes != null && childXmlNodes.Count > 0) 
  78. return childXmlNodes[0]; 
  79. return null
  80. /// <summary> 
  81. /// 获取父节点的子节点列表 
  82. /// </summary> 
  83. /// <param name="parentXmlNode">父节点</param> 
  84. /// <returns></returns> 
  85. public static XmlNodeList GetChildNodes(XmlNode parentXmlNode) 
  86. return parentXmlNode == null ? null : parentXmlNode.ChildNodes; 
  87. #endregion 
  88. //========================================================= // 
  89. //========================================================= // 
  90. #region 读取节点属性值 
  91. /// <summary> 
  92. /// 读取某个XML节点的属性值(根据属性名) 
  93. /// </summary> 
  94. /// <param name="xmlNode"></param> 
  95. /// <param name="attrName"></param> 
  96. /// <returns></returns> 
  97. public static string ReadAttrValue(XmlNode xmlNode, string attrName) 
  98. var xmlElement = xmlNode as XmlElement; 
  99. return xmlElement == null ? null : xmlElement.GetAttribute(attrName); 
  100. /// <summary> 
  101. /// 读取父节点下指定节点名和属性名的第一个子节点的属性值 
  102. /// </summary> 
  103. /// <param name="parentXmlNode">XML父节点</param> 
  104. /// <param name="childNodeName">节点名称</param> 
  105. /// <param name="attrName">属性名</param> 
  106. /// <returns></returns> 
  107. public static string ReadFirstAttrValue(XmlNode parentXmlNode, string childNodeName, string attrName) 
  108. var attrVals = ReadAttrValues(parentXmlNode, childNodeName, attrName); 
  109. return (attrVals == null || attrVals.Length == 0) ? null : attrVals[0]; 
  110. /// <summary> 
  111. /// 读取父节点下指定节点名和属性名的所有子节点的该属性值的数组 
  112. /// </summary> 
  113. /// <param name="parentXmlNode">XML文档</param> 
  114. /// <param name="childNodeName">节点名称</param> 
  115. /// <param name="attrName">属性名</param> 
  116. /// <returns></returns> 
  117. public static string[] ReadAttrValues(XmlNode parentXmlNode, string childNodeName, string attrName) 
  118. if (parentXmlNode == null || string.IsNullOrEmpty(childNodeName) || string.IsNullOrEmpty(attrName)) 
  119. return null
  120. var xpathExpr = string.Format("//{0}[@{1}]", childNodeName, attrName); 
  121. var nodes = GetChildNodesByXPathExpr(parentXmlNode, xpathExpr); 
  122. if (nodes != null && nodes.Count > 0) 
  123. var nodeCount = nodes.Count; 
  124. var attrVals = new string[nodeCount]; 
  125. for (var i = 0; i < nodeCount; i++) 
  126. attrVals[i] = ((XmlElement)nodes[i]).GetAttribute(attrName); 
  127. return attrVals; 
  128. return null
  129. #endregion 
  130. //========================================================= // 
  131. //========================================================= // 
  132. #region 读取父节点下的子节点的文本内容 
  133. /// <summary> 
  134. /// 读取父节点下指定节点名的第一个子节点的文本 
  135. /// </summary> 
  136. /// <param name="parentXmlNode"></param> 
  137. /// <param name="childNodeName"></param> 
  138. /// <returns></returns> 
  139. public static string ReadFirstChildNodeTextByName(XmlNode parentXmlNode, string childNodeName) 
  140. var childNodeTexts = ReadChildNodeTextsByName(parentXmlNode, childNodeName); 
  141. if (childNodeTexts != null && childNodeTexts.Length > 0) 
  142. return childNodeTexts[0]; 
  143. return null
  144. /// <summary> 
  145. /// 读取父节点下指定节点名的所有子节点的文本数组 
  146. /// </summary> 
  147. /// <param name="parentXmlNode"></param> 
  148. /// <param name="childNodeName"></param> 
  149. /// <returns></returns> 
  150. public static string[] ReadChildNodeTextsByName(XmlNode parentXmlNode, string childNodeName) 
  151. if (parentXmlNode == null || string.IsNullOrEmpty(childNodeName)) 
  152. return null
  153. var xpathExpr = string.Format(".//{0}", childNodeName); 
  154. var childNodes = GetChildNodesByXPathExpr(parentXmlNode, xpathExpr); 
  155. if (childNodes != null && childNodes.Count > 0) 
  156. var nodeCount = childNodes.Count; 
  157. var nodeTexts = new string[nodeCount]; 
  158. for (var i = 0; i < nodeCount; i++) 
  159. nodeTexts[i] = childNodes[i].InnerText; 
  160. return nodeTexts; 
  161. return null
  162. /// <summary> 
  163. /// 读取父节点下的第一个子节点的文本 
  164. /// </summary> 
  165. /// <param name="parentXmlNode"></param> 
  166. /// <returns></returns> 
  167. public static string ReadFirstChildNodeText(XmlNode parentXmlNode) 
  168. var childNodeTexts = ReadChildNodeTexts(parentXmlNode); 
  169. if (childNodeTexts != null && childNodeTexts.Length > 0) 
  170. return childNodeTexts[0]; 
  171. return null
  172. /// <summary> 
  173. /// 读取父节点下的所有子节点的文本数组 
  174. /// </summary> 
  175. /// <param name="parentXmlNode"></param> 
  176. /// <returns></returns> 
  177. public static string[] ReadChildNodeTexts(XmlNode parentXmlNode) 
  178. if (parentXmlNode == null
  179. return null
  180. var childNodes = GetChildNodes(parentXmlNode); 
  181. if (childNodes != null && childNodes.Count > 0) 
  182. var nodeCount = childNodes.Count; 
  183. var nodeTexts = new string[nodeCount]; 
  184. for (var i = 0; i < nodeCount; i++) 
  185. nodeTexts[i] = childNodes[i].InnerText; 
  186. return nodeTexts; 
  187. return null
  188. /// <summary> 
  189. /// 读取XML节点文本 
  190. /// </summary> 
  191. /// <param name="xmlNode"></param> 
  192. /// <returns></returns> 
  193. public static string ReadNodeText(XmlNode xmlNode) 
  194. if (xmlNode == null
  195. return null
  196. return xmlNode.InnerText; 
  197. #endregion 
  198. //========================================================= // 

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表