您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > c#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)
c#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)已知有一个XML文件(bookstore.xml)如下:Corets,Eva5.951、插入节点往节点中插入一个节点:XmlDocumentxmlDoc=newXmlDocument();xmlDoc.Load(bookstore.xml);XmlNoderoot=xmlDoc.SelectSingleNode(bookstore);//查找XmlElementxe1=xmlDoc.CreateElement(book);//创建一个节点xe1.SetAttribute(genre,李赞红);//设置该节点genre属性xe1.SetAttribute(ISBN,2-3631-4);//设置该节点ISBN属性XmlElementxesub1=xmlDoc.CreateElement(title);xesub1.InnerText=CS从入门到精通;//设置文本节点xe1.AppendChild(xesub1);//添加到节点中XmlElementxesub2=xmlDoc.CreateElement(author);xesub2.InnerText=候捷;xe1.AppendChild(xesub2);XmlElementxesub3=xmlDoc.CreateElement(price);xesub3.InnerText=58.3;xe1.AppendChild(xesub3);root.AppendChild(xe1);//添加到节点中xmlDoc.Save(bookstore.xml);结果为:Corets,Eva5.95候捷58.32、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点的文本修改为“亚胜”。XmlNodeListnodeList=xmlDoc.SelectSingleNode(bookstore).ChildNodes;//获取bookstore节点的所有子节点foreach(XmlNodexninnodeList)//遍历所有子节点{XmlElementxe=(XmlElement)xn;//将子节点类型转换为XmlElement类型if(xe.GetAttribute(genre)==李赞红)//如果genre属性值为“李赞红”{xe.SetAttribute(genre,update李赞红);//则修改该属性为“update李赞红”XmlNodeListnls=xe.ChildNodes;//继续获取xe子节点的所有子节点foreach(XmlNodexn1innls)//遍历{XmlElementxe2=(XmlElement)xn1;//转换类型if(xe2.Name==author)//如果找到{xe2.InnerText=亚胜;//则修改break;//找到退出来就可以了}}break;}}xmlDoc.Save(bookstore.xml);//保存。最后结果为:Corets,Eva5.95亚胜58.33、删除节点节点的genre属性,删除节点。XmlNodeListxnl=xmlDoc.SelectSingleNode(bookstore).ChildNodes;foreach(XmlNodexninxnl){XmlElementxe=(XmlElement)xn;if(xe.GetAttribute(genre)==fantasy){xe.RemoveAttribute(genre);//删除genre属性}elseif(xe.GetAttribute(genre)==update李赞红){xe.RemoveAll();//删除该节点的全部内容}}xmlDoc.Save(bookstore.xml);最后结果为:Corets,Eva5.954、显示所有数据。XmlNodexn=xmlDoc.SelectSingleNode(bookstore);XmlNodeListxnl=xn.ChildNodes;foreach(XmlNodexnfinxnl){XmlElementxe=(XmlElement)xnf;Console.WriteLine(xe.GetAttribute(genre));//显示属性值Console.WriteLine(xe.GetAttribute(ISBN));XmlNodeListxnf1=xe.ChildNodes;foreach(XmlNodexn2inxnf1){Console.WriteLine(xn2.InnerText);//显示子节点点文本}}2005-10-3一个通过DataSet操作XML的类(源代码)usingSystem;usingSystem.Data;usingSystem.Xml;usingSystem.Windows.Forms;//***************************************//作者:∮明天去要饭//QICQ:305725744//.Net群:6370988//***************************************namespaceYSTRP.Common{//////OperateXmlByDataSet的摘要说明。///publicclassOperateXmlByDataSet{publicOperateXmlByDataSet(){////TODO:在此处添加构造函数逻辑//}#regionGetDataSetByXml//////读取xml直接返回DataSet//////xml文件相对路径///publicstaticDataSetGetDataSetByXml(stringstrXmlPath){try{DataSetds=newDataSet();ds.ReadXml(GetXmlFullPath(strXmlPath));if(ds.Tables.Count0){returnds;}returnnull;}catch(Exceptionex){System.Windows.Forms.MessageBox.Show(ex.ToString());returnnull;}}#endregion#regionGetDataViewByXml//////读取Xml返回一个经排序或筛选后的DataView/////////筛选条件,如:name='kgdiwss'///排序条件,如:Iddesc///publicstaticDataViewGetDataViewByXml(stringstrXmlPath,stringstrWhere,stringstrSort){try{DataSetds=newDataSet();ds.ReadXml(GetXmlFullPath(strXmlPath));DataViewdv=newDataView(ds.Tables[0]);if(strSort!=null){dv.Sort=strSort;}if(strWhere!=null){dv.RowFilter=strWhere;}returndv;}catch(Exception){returnnull;}}#endregion#regionWriteXmlByDataSet//////向Xml文件插入一行数据//////xml文件相对路径///要插入行的列名数组,如:string[]Columns={name,IsMarried};///要插入行每列的值数组,如:string[]ColumnValue={明天去要饭,false};///成功返回true,否则返回falsepublicstaticboolWriteXmlByDataSet(stringstrXmlPath,string[]Columns,string[]ColumnValue){try{//根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下stringstrXsdPath=strXmlPath.Substring(0,strXmlPath.IndexOf(.))+.xsd;DataSetds=newDataSet();//读xml架构,关系到列的数据类型ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));ds.ReadXml(GetXmlFullPath(strXmlPath));DataTabledt=ds.Tables[0];//在原来的表格基础上创建新行DataRownewRow=dt.NewRow();//循环给一行中的各个列赋值for(inti=0;iColumns.Length;i++){newRow[Columns[i]]=ColumnValue[i];}dt.Rows.Add(newRow);dt.AcceptChanges();ds.AcceptChanges();ds.WriteXml(GetXmlFullPath(strXmlPath));returntrue;}catch(Exception){returnfalse;}}#endregion#regionUpdateXmlRow//////更行符合条件的一条Xml记录//////XML文件路径///列名数组///列值数组///条件列名///条件列值///publicstaticboolUpdateXmlRow(stringstrXmlPath,string[]Columns,string[]ColumnValue,stringstrWhereColumnName,stringstrWhereColumnValue){try{stringstrXsdPath=strXmlPath.Substring(0,strXmlPath.IndexOf(.))+.xsd;DataSetds=newDataSet();//读xml架构,关系到列的数据类型ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));ds.ReadXml(GetXmlFullPath(strXmlPath));//先判断行数if(ds.Tables[0].Rows.Count0){for(inti=0;ids.Tables[0].Rows.Count;i++){//如果当前记录为符合Where条件的记录if(ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue)){//循环给找到行的各列赋新值for(intj=0;jColumns.Length;j++){ds.Tables[0].Rows[i][Columns[j]]=ColumnValue[j];}//更新DataSetds.AcceptChanges();//重新写入XML文件ds.WriteXml(GetXmlFullPath(strXmlPath));returntrue;}}}returnfalse;}catch(Exception){returnfalse;}}#endregion#regionDeleteXmlRowByIndex//////通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行/////////要删除的行在DataSet中的Index值publicstaticboolDeleteXmlRowByIndex(stringstrXmlPath,intiDeleteRow){try{DataSetds=newDataSet();ds.ReadXml(GetXmlFullPath(strXmlPath));if(ds.Tables[0].Rows.Coun
本文标题:c#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)
链接地址:https://www.777doc.com/doc-3391464 .html