首页  ·  知识 ·  云计算
XML操作集合
周语菲  http://tmsoft.lsxy.com/index.php?load=read&id=292    编辑:dezai  图片来源:网络
用DataSet操作XML,归根到底就是对DataSet里的表格,行,列等进行操作,然后用DataSet里的东西重新写到XML中,从而实现编辑XML的目的。如果再配合上.xsd文件

用DataSet操作XML,归根到底就是对DataSet里的表格,行,列等进行操作,然后用DataSet里的东西重新写到XML中,从而实现编辑XML的目的。如果再配合上.xsd文件的话,那效果更佳。

一、  读操作

1.1读取XML的数据到DataSet中的方法(全部读取)为

(调用部分)

DataGrid1.DataSource = OperateXmlByDataSet.GetDataSetByXml(@"xml/xml_xmlDB.xml");
DataGrid1.DataBind();

(方法部分)

#region GetDataSetByXml
///


/// 读取xml直接返回DataSet
///

/// xml文件相对路径
 
///
public static DataSet GetDataSetByXml(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
//读取XML到DataSet
ds.ReadXml(GetXmlFullPath(strXmlPath));// GetXmlFullPath()//此方法用于将相对路径转为全局路径
if(ds.Tables.Count > 0)
{
return ds;
}
return null;
}
catch(Exception)
{
return null;
}
}
#endregion

1.2读取XML的数据到DataSet中(条件选择)的方法为

(调用部分)

DataGrid1.DataSource = OperateXmlByDataSet.GetDataViewByXml(
@"xml/xml_xmlDB.xml", //XML文件路径
"name = 'Asp.net'", //条件:name列值为Asp.net
"peopleNum desc"); //按peopleNum列降序排列
DataGrid1.DataBind();

(方法部分)

#region GetDataViewByXml

                   /// 〈summary〉

                   /// 读取Xml返回一个经排序或筛选后的DataView

                   /// 〈/summary〉

                   /// 〈param name="strXmlPath"〉〈/param〉

                   /// 〈param name="strWhere"〉筛选条件,如:"name = 'kgdiwss'"〈/param〉

                   /// 〈param name="strSort"〉排序条件,如:"Id desc"〈/param〉

                   /// 〈returns〉〈/returns〉

                   public static DataView GetDataViewByXml(string strXmlPath,string strWhere,string strSort)

                   {

                            try

                            {

                                     DataSet ds = new DataSet();                   

                                     ds.ReadXml(GetXmlFullPath(strXmlPath));

                   //创建DataView来完成排序或筛选操作               

                                     DataView dv = new DataView(ds.Tables[0]);

                                     if(strSort != null)

                                     {

                        //对DataView中的记录进行排序

                                               dv.Sort = strSort;

                                     }

                                     if(strWhere != null)

                                     {

                                               //对DataView中的记录进行筛选,找到我们想要的记录

                                               dv.RowFilter = strWhere;                       

                                     }

                                     return dv;

                            }

                            catch(Exception)

                            {

                                     return null;

                            }

                   }

                   #endregion

 

一、      增加操作

(调用部分)

bool b;
b = OperateXmlByDataSet.WriteXmlByDataSet(
@"xml/xml_xmlDB.xml", //XML文件地址
new string[]{
"name", //姓名字段
"peopleNum", //人数字段
"address", //地址字段
"description", //描述字段
"require", //需求字段
"deadLine", //结束时间字段
"IsMarried" //婚否字段
},
new string[]{
"Asp.net程序员", //姓名字段值
"2", //人数字段值
"建国路", //地址字段值
"B/S结构程序", //描述字段值
"asp.net c#等", //需求字段值
DateTime.Now.ToShortDateString(), //结束时间字段值
"false" //婚否字段值
});

(方法部分)

#region WriteXmlByDataSet

                   /// 〈summary〉

                   /// 向Xml文件插入一行数据

                   /// 〈/summary〉

                   /// 〈param name="strXmlPath"〉xml文件相对路径〈/param〉

                   /// 〈param name="Columns"〉要插入行的列名数组,如:string[] Columns = {"name","IsMarried"};〈/param〉

                   /// 〈param name="ColumnValue"〉要插入行每列的值数组,如:string[] ColumnValue={"kgdiwss","false"};〈/param〉

                   /// 〈returns〉成功返回true,否则返回false〈/returns〉

                   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

二、      修改操作

3.1更行符合条件的一条Xml记录

(调用部分)

bool b;
b = OperateXmlByDataSet.UpdateXmlRow(
@"xml/xml_xmlDB.xml",
new string[]{"name","peopleNum","description","IsMarried"},
new string[]{"kgdiwss","10","描述","true"},
"peopleNum",
"3");

(方法部分)

#region UpdateXmlRow

                   /// 〈summary〉

                   /// 更行符合条件的一条Xml记录

                   /// 〈/summary〉

                   /// 〈param name="strXmlPath"〉XML文件路径〈/param〉

                   /// 〈param name="Columns"〉列名数组〈/param〉

                   /// 〈param name="ColumnValue"〉列值数组〈/param〉

                   /// 〈param name="strWhereColumnName"〉条件列名〈/param〉

                   /// 〈param name="strWhereColumnValue"〉条件列值〈/param〉

                   /// 〈returns〉〈/returns〉

                   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

三、      删除操作

4.1删除所有行

(调用部分)

 

bool b;
b = OperateXmlByDataSet.DeleteXmlRows(
@"xml/xml_xmlDB.xml", //XML文件路径
"name", //条件列
new string[]{
"值1", //条件值1
"值2", //条件值2
"值3" //条件值3
});

(方法部分)

 

#region DeleteXmlAllRows

                   /// 〈summary〉

                   /// 删除所有行

                   /// 〈/summary〉

                   /// 〈param name="strXmlPath"〉XML路径〈/param〉

                   /// 〈returns〉〈/returns〉

                   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

4.2删除指定Index值的行的方法为:

                   #region DeleteXmlRowByIndex

                   /// 〈summary〉

                   /// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行

                   /// 〈/summary〉

                   /// 〈param name="strXmlPath"〉〈/param〉

                   /// 〈param name="iDeleteRow"〉要删除的行在DataSet中的Index值〈/param〉

                   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

 

本文作者:周语菲 来源:http://tmsoft.lsxy.com/index.php?load=read&id=292
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读