已知有一个XML文件(bookstore.xml)如下:  Corets, Eva  5.95  1、插入节点  往节点中插入一个节点: 
 复制代码 代码如下:  XmlDocument xmlDoc=new XmlDocument();  xmlDoc.Load("bookstore.xml");  XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找  XmlElement xe1=xmlDoc.CreateElement("book");//创建一个节点  xe1.SetAttribute("genre","李赞红");//设置该节点genre属性  xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性 
  XmlElement xesub1=xmlDoc.CreateElement("title");  xesub1.InnerText="CS从入门到精通";//设置文本节点  xe1.AppendChild(xesub1);//添加到节点中  XmlElement xesub2=xmlDoc.CreateElement("author");  xesub2.InnerText="候捷";  xe1.AppendChild(xesub2);  XmlElement xesub3=xmlDoc.CreateElement("price");  xesub3.InnerText="58.3";  xe1.AppendChild(xesub3); 
  root.AppendChild(xe1);//添加到节点中  xmlDoc.Save("bookstore.xml"); 
 
  结果为:  Corets, Eva  5.95  候捷  58.3  2、修改节点:  将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点的文本修改为“亚胜”。 
 
 复制代码 代码如下:  XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点  foreach(XmlNode xn in nodeList)//遍历所有子节点  {  XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型  if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”  {  xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红” 
  XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点  foreach(XmlNode xn1 in nls)//遍历  {  XmlElement xe2=(XmlElement)xn1;//转换类型  if(xe2.Name=="author")//如果找到  {  xe2.InnerText="亚胜";//则修改  break;//找到退出来就可以了  }  }  break;  }  }  xmlDoc.Save("bookstore.xml");//保存。 
 
  最后结果为:  Corets, Eva  5.95  亚胜  58.3  3、删除节点  节点的genre属性,删除 节点。 
 
 复制代码 代码如下:  XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes; 
  foreach(XmlNode xn in xnl)  {  XmlElement xe=(XmlElement)xn;  if(xe.GetAttribute("genre")=="fantasy")  {  xe.RemoveAttribute("genre");//删除genre属性  }  else if(xe.GetAttribute("genre")=="update李赞红")  {  xe.RemoveAll();//删除该节点的全部内容  }  }  xmlDoc.Save("bookstore.xml"); 
 
  最后结果为:  Corets, Eva  5.95  4、显示所有数据。 
 
 复制代码 代码如下:  XmlNode xn=xmlDoc.SelectSingleNode("bookstore"); 
  XmlNodeList xnl=xn.ChildNodes; 
  foreach(XmlNode xnf in xnl)  {  XmlElement xe=(XmlElement)xnf;  Console.WriteLine(xe.GetAttribute("genre"));//显示属性值  Console.WriteLine(xe.GetAttribute("ISBN")); 
  XmlNodeList xnf1=xe.ChildNodes;  foreach(XmlNode xn2 in xnf1)  {  Console.WriteLine(xn2.InnerText);//显示子节点点文本  }  } 
 
  loading... 
 
  一个通过DataSet操作XML的类(源代码) 
 
 
 复制代码 代码如下:  using System;  using System.Data;  using System.Xml;  using System.Windows.Forms; 
  //***************************************  // 作者: ∮明天去要饭  // QICQ: 305725744  // .Net群: 6370988  //   //*************************************** 
  namespace YSTRP.Common  {  ///  /// OperateXmlByDataSet 的摘要说明。  ///  public class OperateXmlByDataSet  {  public OperateXmlByDataSet()  {  //  // TODO: 在此处添加构造函数逻辑  //  } 
  #region GetDataSetByXml  ///  /// 读取xml直接返回DataSet  ///  /// xml文件相对路径  ///  public static DataSet GetDataSetByXml(string strXmlPath)  {  try  {  DataSet ds = new DataSet();  ds.ReadXml(GetXmlFullPath(strXmlPath));  if(ds.Tables.Count > 0)  {  return ds;  }  return null;  }  catch(Exception ex)  {  System.Windows.Forms.MessageBox.Show(ex.ToString());  return null;  }  }  #endregion  #region GetDataViewByXml  ///  /// 读取Xml返回一个经排序或筛选后的DataView  ///  ///  /// 筛选条件,如:"name = 'kgdiwss'"  /// 排序条件,如:"Id desc"  ///  public static DataView GetDataViewByXml(string strXmlPath,string strWhere,string strSort)  {  try  {  DataSet ds = new DataSet();  ds.ReadXml(GetXmlFullPath(strXmlPath));  DataView dv = new DataView(ds.Tables[0]);  if(strSort != null)  {  dv.Sort = strSort;  }  if(strWhere != null)  {  dv.RowFilter = strWhere;  }  return dv;  }  catch(Exception)  {  return null;  }  }  #endregion 
 
  #region WriteXmlByDataSet  ///  /// 向Xml文件插入一行数据  ///  /// xml文件相对路径  /// 要插入行的列名数组,如:string[] Columns = {"name","IsMarried"};  /// 要插入行每列的值数组,如:string[] ColumnValue={"明天去要饭","false"};  /// 成功返回true,否则返回false  public static bool WriteXmlByDataSet(string strXmlPath,string[] Columns,string[] ColumnValue)  {  try  {  //根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下  string strXsdPath = strXmlPath.Substring(0,strXmlPath.IndexOf(".")) + ".xsd"; 
  DataSet ds = new DataSet();  //读xml架构,关系到列的数据类型  ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));  ds.ReadXml(GetXmlFullPath(strXmlPath));  DataTable dt = ds.Tables[0];  //在原来的表格基础上创建新行  DataRow newRow = dt.NewRow(); 
  //循环给一行中的各个列赋值  for(int i=0; i< Columns.Length; i++)  {  newRow[Columns[i]] = ColumnValue[i];  }  dt.Rows.Add(newRow);  dt.AcceptChanges();  ds.AcceptChanges(); 
  ds.WriteXml(GetXmlFullPath(strXmlPath));  return true;  }  catch(Exception)  {  return false;  }  }  #endregion 
 
  #region UpdateXmlRow  ///  /// 更行符合条件的一条Xml记录  ///  /// XML文件路径  /// 列名数组  /// 列值数组  /// 条件列名  /// 条件列值  ///  public static bool UpdateXmlRow(string strXmlPath,string[] Columns,string[] ColumnValue,string strWhereColumnName,string strWhereColumnValue)  {  try  {  string strXsdPath = strXmlPath.Substring(0,strXmlPath.IndexOf(".")) + ".xsd"; 
  DataSet ds = new DataSet();  //读xml架构,关系到列的数据类型  ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));  ds.ReadXml(GetXmlFullPath(strXmlPath)); 
  //先判断行数  if(ds.Tables[0].Rows.Count > 0)  {  for(int i=0; i< ds.Tables[0].Rows.Count; i++)  {  //如果当前记录为符合Where条件的记录  if(ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue))  {  //循环给找到行的各列赋新值  for(int j=0; j < Columns.Length; j++)  {  ds.Tables[0].Rows[i][Columns[j]] = ColumnValue[j];  }  //更新DataSet  ds.AcceptChanges();  //重新写入XML文件  ds.WriteXml(GetXmlFullPath(strXmlPath));  return true;  }  } 
  }  return false;  }  catch(Exception)  {  return false;  }  }  #endregion 
 
  #region DeleteXmlRowByIndex  ///  /// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行  ///  ///  /// 要删除的行在DataSet中的Index值  public static bool DeleteXmlRowByIndex(string strXmlPath,int iDeleteRow)  {  try  {  DataSet ds = new DataSet();  ds.ReadXml(GetXmlFullPath(strXmlPath));  if(ds.Tables[0].Rows.Count > 0)  {  //删除符号条件的行  ds.Tables[0].Rows[iDeleteRow].Delete();  }  ds.WriteXml(GetXmlFullPath(strXmlPath));  return true;  }  catch(Exception)  {  return false;  }  }  #endregion 
 
  #region DeleteXmlRows  ///  /// 删除strColumn列中值为ColumnValue的行  ///  /// xml相对路径  /// 列名  /// strColumn列中值为ColumnValue的行均会被删除  ///  public static bool DeleteXmlRows(string strXmlPath,string strColumn,string[] ColumnValue)  {  try  {  DataSet ds = new DataSet();  ds.ReadXml(GetXmlFullPath(strXmlPath)); 
  //先判断行数  if(ds.Tables[0].Rows.Count > 0)  {  //判断行多还是删除的值多,多的for循环放在里面  if(ColumnValue.Length > ds.Tables[0].Rows.Count)  {  for(int i=0; i < ds.Tables[0].Rows.Count; i++)  {  for(int j=0; j < ColumnValue.Length; j++)  {  if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))  {  ds.Tables[0].Rows[i].Delete();  }  }  }  }  else  {  for(int j=0; j < ColumnValue.Length; j++)  {  for(int i=0; i < ds.Tables[0].Rows.Count; i++)  {  if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))  {  ds.Tables[0].Rows[i].Delete();  }  }  }  }  ds.WriteXml(GetXmlFullPath(strXmlPath));  }  return true;  }  catch(Exception)  {  return false;  }  }  #endregion 
 
  #region DeleteXmlAllRows  ///  /// 删除所有行  ///  /// XML路径  ///  public static bool DeleteXmlAllRows(string strXmlPath)  {  try  {  DataSet ds = new DataSet();  ds.ReadXml(GetXmlFullPath(strXmlPath));  //如果记录条数大于0  if(ds.Tables[0].Rows.Count > 0)  {  //移除所有记录  ds.Tables[0].Rows.Clear();  }  //重新写入,这时XML文件中就只剩根节点了  ds.WriteXml(GetXmlFullPath(strXmlPath));  return true;  }  catch(Exception)  {  return false;  }  }  #endregion 
 
  #region GetXmlFullPath  ///  /// 返回完整路径  ///  /// Xml的路径  ///  public static string GetXmlFullPath(string strPath)  {  if(strPath.IndexOf(":") > 0)  {  return strPath;  }  else  {  return Application.StartupPath + strPath;  }  }  #endregion  }  } 
                          (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |