基于C#实现XML文件读取工具类
本文实例讲述了基于C#实现XML文件读取工具类。分享给大家供大家参考。具体如下:
这是我去年写的一个XML文件读取工具类,现在做了一些调整
基本能满足一般的XML文件读取需求。
更新:
2013年6月26日19:37Fix了几个Bug,为所有方法添加单元测试,并运行通过;同时调整了几个方法的位置。
///<summary> ///Author:jiangxiaoqiang ///</summary> publicclassXmlReader { //=========================================================// #region获取XmlDocument对象 ///<summary> ///根据XML文件内容获取XmlDocument对象 ///</summary> ///<paramname="xmlFileContent"></param> ///<returns></returns> publicstaticXmlDocumentGetXmlDocByXmlContent(stringxmlFileContent) { if(string.IsNullOrEmpty(xmlFileContent)) { returnnull; } varxDoc=newXmlDocument(); try { xDoc.LoadXml(xmlFileContent); } catch { xDoc=null; } returnxDoc; } ///<summary> ///根据XML文件路径获取XmlDocument对象 ///</summary> ///<paramname="xmlFilePath"></param> ///<returns></returns> publicstaticXmlDocumentGetXmlDocByFilePath(stringxmlFilePath) { if(string.IsNullOrEmpty(xmlFilePath)||!File.Exists(xmlFilePath)) { returnnull; } varxDoc=newXmlDocument(); try { xDoc.Load(xmlFilePath); } catch { thrownewException(string.Format("请确认该XML文件格式正确,路径为:{0}",xmlFilePath)); } returnxDoc; } #endregion //=========================================================// //=========================================================// #region获取XML节点(或节点列表) ///<summary> ///获取父节点下指定节点名称的第一个子节点 ///</summary> ///<paramname="parentXmlNode"></param> ///<paramname="childNodeName"></param> ///<returns></returns> publicstaticXmlNodeGetFirstChildNodeByName(XmlNodeparentXmlNode,stringchildNodeName) { varchildXmlNodes=GetChildNodesByName(parentXmlNode,childNodeName); if(childXmlNodes!=null&&childXmlNodes.Count>0) { returnchildXmlNodes[0]; } returnnull; } ///<summary> ///获取父节点下指定节点名称的子节点列表 ///</summary> ///<paramname="parentXmlNode">父节点</param> ///<paramname="nodeName">节点名称</param> ///<returns></returns> publicstaticXmlNodeListGetChildNodesByName(XmlNodeparentXmlNode,stringnodeName) { if(parentXmlNode==null||string.IsNullOrEmpty(nodeName)) { returnnull; } returnGetChildNodesByXPathExpr(parentXmlNode,string.Format(".//{0}",nodeName)); } ///<summary> ///获取父节点下满足xpathExpr表达式的XML子节点列表 ///</summary> ///<paramname="parentXmlNode">父节点</param> ///<paramname="xpathExpr"></param> ///<returns></returns> publicstaticXmlNodeListGetChildNodesByXPathExpr(XmlNodeparentXmlNode,stringxpathExpr) { if(parentXmlNode==null||string.IsNullOrEmpty(xpathExpr)) { returnnull; } returnparentXmlNode.SelectNodes(xpathExpr); } ///<summary> ///获取父节点下的第一个子节点 ///</summary> ///<paramname="parentXmlNode"></param> ///<returns></returns> publicstaticXmlNodeGetFirstChildNode(XmlNodeparentXmlNode) { varchildXmlNodes=GetChildNodes(parentXmlNode); if(childXmlNodes!=null&&childXmlNodes.Count>0) { returnchildXmlNodes[0]; } returnnull; } ///<summary> ///获取父节点的子节点列表 ///</summary> ///<paramname="parentXmlNode">父节点</param> ///<returns></returns> publicstaticXmlNodeListGetChildNodes(XmlNodeparentXmlNode) { returnparentXmlNode==null?null:parentXmlNode.ChildNodes; } #endregion //=========================================================// //=========================================================// #region读取节点属性值 ///<summary> ///读取某个XML节点的属性值(根据属性名) ///</summary> ///<paramname="xmlNode"></param> ///<paramname="attrName"></param> ///<returns></returns> publicstaticstringReadAttrValue(XmlNodexmlNode,stringattrName) { varxmlElement=xmlNodeasXmlElement; returnxmlElement==null?null:xmlElement.GetAttribute(attrName); } ///<summary> ///读取父节点下指定节点名和属性名的第一个子节点的属性值 ///</summary> ///<paramname="parentXmlNode">XML父节点</param> ///<paramname="childNodeName">节点名称</param> ///<paramname="attrName">属性名</param> ///<returns></returns> publicstaticstringReadFirstAttrValue(XmlNodeparentXmlNode,stringchildNodeName,stringattrName) { varattrVals=ReadAttrValues(parentXmlNode,childNodeName,attrName); return(attrVals==null||attrVals.Length==0)?null:attrVals[0]; } ///<summary> ///读取父节点下指定节点名和属性名的所有子节点的该属性值的数组 ///</summary> ///<paramname="parentXmlNode">XML文档</param> ///<paramname="childNodeName">节点名称</param> ///<paramname="attrName">属性名</param> ///<returns></returns> publicstaticstring[]ReadAttrValues(XmlNodeparentXmlNode,stringchildNodeName,stringattrName) { if(parentXmlNode==null||string.IsNullOrEmpty(childNodeName)||string.IsNullOrEmpty(attrName)) { returnnull; } varxpathExpr=string.Format("//{0}[@{1}]",childNodeName,attrName); varnodes=GetChildNodesByXPathExpr(parentXmlNode,xpathExpr); if(nodes!=null&&nodes.Count>0) { varnodeCount=nodes.Count; varattrVals=newstring[nodeCount]; for(vari=0;i<nodeCount;i++) { attrVals[i]=((XmlElement)nodes[i]).GetAttribute(attrName); } returnattrVals; } returnnull; } #endregion //=========================================================// //=========================================================// #region读取父节点下的子节点的文本内容 ///<summary> ///读取父节点下指定节点名的第一个子节点的文本 ///</summary> ///<paramname="parentXmlNode"></param> ///<paramname="childNodeName"></param> ///<returns></returns> publicstaticstringReadFirstChildNodeTextByName(XmlNodeparentXmlNode,stringchildNodeName) { varchildNodeTexts=ReadChildNodeTextsByName(parentXmlNode,childNodeName); if(childNodeTexts!=null&&childNodeTexts.Length>0) { returnchildNodeTexts[0]; } returnnull; } ///<summary> ///读取父节点下指定节点名的所有子节点的文本数组 ///</summary> ///<paramname="parentXmlNode"></param> ///<paramname="childNodeName"></param> ///<returns></returns> publicstaticstring[]ReadChildNodeTextsByName(XmlNodeparentXmlNode,stringchildNodeName) { if(parentXmlNode==null||string.IsNullOrEmpty(childNodeName)) { returnnull; } varxpathExpr=string.Format(".//{0}",childNodeName); varchildNodes=GetChildNodesByXPathExpr(parentXmlNode,xpathExpr); if(childNodes!=null&&childNodes.Count>0) { varnodeCount=childNodes.Count; varnodeTexts=newstring[nodeCount]; for(vari=0;i<nodeCount;i++) { nodeTexts[i]=childNodes[i].InnerText; } returnnodeTexts; } returnnull; } ///<summary> ///读取父节点下的第一个子节点的文本 ///</summary> ///<paramname="parentXmlNode"></param> ///<returns></returns> publicstaticstringReadFirstChildNodeText(XmlNodeparentXmlNode) { varchildNodeTexts=ReadChildNodeTexts(parentXmlNode); if(childNodeTexts!=null&&childNodeTexts.Length>0) { returnchildNodeTexts[0]; } returnnull; } ///<summary> ///读取父节点下的所有子节点的文本数组 ///</summary> ///<paramname="parentXmlNode"></param> ///<returns></returns> publicstaticstring[]ReadChildNodeTexts(XmlNodeparentXmlNode) { if(parentXmlNode==null) { returnnull; } varchildNodes=GetChildNodes(parentXmlNode); if(childNodes!=null&&childNodes.Count>0) { varnodeCount=childNodes.Count; varnodeTexts=newstring[nodeCount]; for(vari=0;i<nodeCount;i++) { nodeTexts[i]=childNodes[i].InnerText; } returnnodeTexts; } returnnull; } ///<summary> ///读取XML节点文本 ///</summary> ///<paramname="xmlNode"></param> ///<returns></returns> publicstaticstringReadNodeText(XmlNodexmlNode) { if(xmlNode==null) { returnnull; } returnxmlNode.InnerText; } #endregion //=========================================================// }
希望本文所述对大家的C#程序设计有所帮助。