C#操作Xml的基本方法
在.net的项目开发中,经常会对XML文件进行操作,由于XML文件可以实现跨平台传输,较多的应用在数据传输中,特总结以下几种常用的XML操作方法:
1.创建XML文档:
///<summary>///创建XML文档///</summary>///<paramname="name">根节点名称</param>///<paramname="type">根节点的一个属性值</param>///<returns>XmlDocument对象</returns>publicstaticXmlDocumentCreateXmlDocument(stringname,stringtype){XmlDocumentdoc;try{doc=newXmlDocument();doc.LoadXml("<"+name+"/>");varrootEle=doc.DocumentElement;rootEle?.SetAttribute("type",type);}catch(Exceptioner){thrownewException(er.ToString());}returndoc;}
2.读取XML文档中的数据:
///<summary>///读取数据///</summary>///<paramname="path">路径</param>///<paramname="node">节点</param>///<paramname="attribute">属性名,非空时返回该属性值,否则返回串联值</param>///<returns>string</returns>publicstaticstringRead(stringpath,stringnode,stringattribute){varvalue="";try{vardoc=newXmlDocument();doc.Load(path);varxn=doc.SelectSingleNode(node);if(xn!=null&&xn.Attributes!=null)value=(attribute.Equals("")?xn.InnerText:xn.Attributes[attribute].Value);}catch(Exceptioner){thrownewException(er.ToString());}returnvalue;}
3.对XML文档插入数据:
///<summary>///插入数据///</summary>///<paramname="path">路径</param>///<paramname="node">节点</param>///<paramname="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>///<paramname="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>///<paramname="value">值</param>///<returns></returns>publicstaticvoidInsert(stringpath,stringnode,stringelement,stringattribute,stringvalue){try{vardoc=newXmlDocument();doc.Load(path);varxn=doc.SelectSingleNode(node);if(element.Equals("")){if(!attribute.Equals("")){varxe=(XmlElement)xn;xe?.SetAttribute(attribute,value);//xe?.SetAttribute(attribute,value);}}else{varxe=doc.CreateElement(element);if(attribute.Equals(""))xe.InnerText=value;elsexe.SetAttribute(attribute,value);xn?.AppendChild(xe);}doc.Save(path);}catch(Exceptioner){thrownewException(er.ToString());}}
4.修改XML文档中的数据:
///<summary>///修改数据///</summary>///<paramname="path">路径</param>///<paramname="node">节点</param>///<paramname="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>///<paramname="value">值</param>///<returns></returns>publicstaticvoidUpdate(stringpath,stringnode,stringattribute,stringvalue){try{vardoc=newXmlDocument();doc.Load(path);varxn=doc.SelectSingleNode(node);varxe=(XmlElement)xn;if(attribute.Equals("")){if(xe!=null)xe.InnerText=value;}else{xe?.SetAttribute(attribute,value);}doc.Save(path);}catch(Exceptioner){thrownewException(er.ToString());}}
5.删除XML文档中数据:
///<summary>///删除数据///</summary>///<paramname="path">路径</param>///<paramname="node">节点</param>///<paramname="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>///<returns></returns>publicstaticvoidDelete(stringpath,stringnode,stringattribute){try{vardoc=newXmlDocument();doc.Load(path);varxn=doc.SelectSingleNode(node);varxe=(XmlElement)xn;if(attribute.Equals("")){xn?.ParentNode?.RemoveChild(xn);}else{xe?.RemoveAttribute(attribute);}doc.Save(path);}catch(Exceptioner){thrownewException(er.ToString());}}
6.读取XML文档中指定节点数据:
///<summary>///获得xml文件中指定节点的节点数据///</summary>///<paramname="path"></param>///<paramname="nodeName"></param>///<returns></returns>publicstaticstringGetNodeInfoByNodeName(stringpath,stringnodeName){varxmlString=string.Empty;try{varxml=newXmlDocument();xml.Load(path);varroot=xml.DocumentElement;if(root==null)returnxmlString;varnode=root.SelectSingleNode("//"+nodeName);if(node!=null){xmlString=node.InnerText;}}catch(Exceptioner){thrownewException(er.ToString());}returnxmlString;}
7.获取XML指定节点的属性:
///<summary>///功能:读取指定节点的指定属性值///</summary>///<paramname="path"></param>///<paramname="strNode">节点名称</param>///<paramname="strAttribute">此节点的属性</param>///<returns></returns>publicstringGetXmlNodeAttributeValue(stringpath,stringstrNode,stringstrAttribute){varstrReturn="";try{varxml=newXmlDocument();xml.Load(path);//根据指定路径获取节点varxmlNode=xml.SelectSingleNode(strNode);if(xmlNode!=null){//获取节点的属性,并循环取出需要的属性值varxmlAttr=xmlNode.Attributes;if(xmlAttr==null)returnstrReturn;for(vari=0;i<xmlAttr.Count;i++){if(xmlAttr.Item(i).Name!=strAttribute)continue;strReturn=xmlAttr.Item(i).Value;break;}}}catch(XmlExceptionxmle){thrownewException(xmle.Message);}returnstrReturn;}
8.将对象转化为XML文件,并存入指定目录:
///<summary>///将对象转化为xml,并写入指定路径的xml文件中///</summary>///<typeparamname="T">C#对象名</typeparam>///<paramname="item">对象实例</param>///<paramname="path">路径</param>///<paramname="jjdbh">标号</param>///<paramname="ends">结束符号(整个xml的路径类似如下:C:\xmltest\201111send.xml,其中path=C:\xmltest,jjdbh=201111,ends=send)</param>///<returns></returns>publicstaticstringWriteXml<T>(Titem,stringpath,stringjjdbh,stringends){if(string.IsNullOrEmpty(ends)){//默认为发送ends="send";}//控制写入文件的次数vari=0;//获取当前对象的类型,也可以使用反射typeof(对象名)varserializer=newXmlSerializer(item.GetType());//xml的路径组合object[]obj={path,"\\",jjdbh,ends,".xml"};varxmlPath=string.Concat(obj);while(true){try{//用filestream方式创建文件不会出现“文件正在占用中,用File.create”则不行varfs=System.IO.File.Create(xmlPath);fs.Close();TextWriterwriter=newStreamWriter(xmlPath,false,Encoding.UTF8);varxml=newXmlSerializerNamespaces();xml.Add(string.Empty,string.Empty);serializer.Serialize(writer,item,xml);writer.Flush();writer.Close();break;}catch(Exception){if(i<5){i++;continue;}break;}}returnSerializeToXmlStr<T>(item,true);}
以上的方法总结采用.net4.5版本和c#6.0语法。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。