xml 操作

kevin_god發表於2009-06-05
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...   
   
2005-10-3  
一個通過DataSet操作XML的類(原始碼)   


using System;  
using System.Data;  
using System.Xml;  
using System.Windows.Forms;  

//***************************************  
// 作者: ∮明天去要飯  
// QICQ: 305725744  
// .Net群: 6370988  
// http://blog.csdn.net/kgdiwss  
//***************************************  

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  
}  
}  

loading...   
   

2005-10-3  
一個通過DataSet操作XML的類   


  這段時間寫的專案每次都要用到XML儲存一些配置,而每次操作XML都覺得挺麻煩,沒有資料庫那麼順手。後來發現用DataSet操作XML很方便,而且靈活性比較好,於是寫了一個操作XML的類,用來應付一般的XML操作(原始碼下載附件)。  

  1 基本思路  
  其實用DataSet操作XML,歸根到底就是對DataSet裡的表格,行,列等進行操作,然後用DataSet裡的東西重新寫到XML中,從而實現編輯XML的目的。如果再配合上.xsd檔案的話,那效果更佳。  

  2 程式詳解  
  (1) XML檔案內容  
  本類操作的XML和生成的XML格式是一樣的,如下:  


http://tempuri.org/xml_xmlDB.xsd">  

2 Asp.net程式設計師  
2  
開發B/S結構程式  
asp.net c#等  

建國路XXX  

2008-8-31  
false  

4  
c#程式設計師  
2  
開發B/S結構程式  
asp.net c#等  

建國路XXX  

2008-8-31  
false  

  然後點選XML檔案右下角的“資料”,即可看到熟悉的表格形式,在表格的任意位置上單擊右鍵選擇“建立架構”,將會生成一個.xsd檔案,該檔案用來定義XML各列的型別。其內容如下(點選檢視程式碼2附件):  

http://tempuri.org/xml_xmlDB.xsd"   xmlns:mstns="http://tempuri.org/xml_xmlDB.xsd"xmlns="http://tempuri.org/xml_xmlDB.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"attributeFormDefault="qualified" elementFormDefault="qualified"> msdata:Locale="zh-CN" msdata:EnforceConstaints="False">?msdata:AutoIncrement="true" msdata:AutoIncrementStep="1"msdata:AutoIncrementSeed="1" />  
   


  注意:如果想像資料庫一樣有一個自動增長的ID欄位,則可以這樣操作:  
  首先在XML中新增一個元素,這樣生成.xsd的時候,就會有一個ID段,在.xsd中選中ID這一列,在右邊的屬性中,將“AutoIncrementSeed”和“AutoIncrementStep”分別設定為1,這樣ID就會從1開始以步長為1自動增長。  

  以上程式碼如果看不懂並不要緊,因為我們可以通過DataSet來生成這種格式的內容。接下來將開始操作XML。  

  (2) 處理XML檔案路徑  
  這裡主要是對傳入的XML路徑進行處理,如果傳入的是相對路徑,則返回完整路徑,如果傳入的是完整路徑,則不做處理直接返回。方法如下:  

#region GetXmlFullPath  
///   
/// 返回完整路徑  
///   
/// Xml的路徑  
///   
public static string GetXmlFullPath(string strPath)  
{  
//如果路徑中含有:符號,則認定為傳入的是完整路徑   
if(strPath.IndexOf(":") > 0)  
{  
return strPath;  
}  
else  
{  
//返回完整路徑  
return System.Web.HttpContext.Current.Server.MapPath(strPath);  
}  
}  
#endregion   


  (3) 讀取記錄  
  讀取XML的資料到DataSet中的方法為:  

#region GetDataSetByXml  
///   
/// 讀取xml直接返回DataSet  
///   
/// xml檔案相對路徑  
///   
public static DataSet GetDataSetByXml(string strXmlPath)  
{  
try  
{  
DataSet ds = new DataSet();  
//讀取XML到DataSet  
ds.ReadXml(GetXmlFullPath(strXmlPath));  
if(ds.Tables.Count > 0)  
{  
return ds;  
}  
return null;  
}  
catch(Exception)  
{  
return null;  
}  
}  
#endregion  
   


  以上方法將得到一個DataSet,裡面儲存的是全部XML記錄的資訊,而且沒有經過任何處理。但很多時候我們需要的只是一些滿足條件的記錄,這時需要用以下方法得到:  

#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   

   


  (4) 插入記錄  
  到現在為止我們已經可以隨意讀取XML中的記錄,接下來來實現寫入XML的操作,方法如下:  

#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  
   


  可能有的朋友不知道怎麼用這個方法插入資料,在後面我將用例項介紹。  

  (5) 修改記錄  
  修改記錄的方法要傳入的引數相對較多,因為修改記錄需要先定位到具體哪一條記錄,再修改指定列的值,以下為修改XML的方法:  

#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  
   

   


  (6) 刪除記錄  
  為了方便,刪除記錄提供了三個方法,一個可以刪除所有記錄,一個刪除符合條件的行,還有一個刪除指定Index值的行,該Index值和記錄在Data  
  Set中的Index值對應。刪除所有記錄的方法為:  

#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  
刪除指定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  
   


  這裡說一下提供此方法的原因,有的時候將XML的內容讀到DataSet,然後繫結到DataGrid後,由於DataGrid中只有一個模板列,而模板列裡又套了表格等許多控制元件,這就使得我們可能無法得到記錄對應的ID值,這個時候就可以先得到記錄的Index值(第一行為0,第二行為1,以此類推),然後將該Index值傳到方法中,就可以將該記錄刪掉。  

  注意:使用該方法的時候,繫結到DataGrid上的DataSet和刪除時用的DataSet要為同一個,也就是說Index要相同,不能有排序,不然會誤將記錄。  

  有時候我們需要刪除符合條件的多行,這個時候可以用以下方法實現:  

#region DeleteXmlRows  
/// 〈summary〉  
/// 刪除strColumn列中值為ColumnValue的行  
/// 〈/summary〉  
/// 〈param name="strXmlPath"〉xml相對路徑〈/param〉  
/// 〈param name="strColumn"〉列名〈/param〉  
/// 〈param name="ColumnValue"〉strColumn列中值為ColumnValue的行均會被刪除〈/param〉  
/// 〈returns〉〈/returns〉  
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  
   

   

3例項解析  

  (7) 讀取XML  
  以下程式碼讀取到一個沒有排序和篩選的DataSet。  
DataGrid1.DataSource = OperateXmlByDataSet.GetDataSetByXml(@"xml/xml_xmlDB.xml");  
DataGrid1.DataBind();  
以下程式碼讀到的資料是經過篩選和排序的:  
DataGrid1.DataSource = OperateXmlByDataSet.GetDataViewByXml(  
@"xml/xml_xmlDB.xml", //XML檔案路徑  
"name = 'Asp.net'", //條件:name列值為Asp.net  
"peopleNum desc"); //按peopleNum列降序排列  
DataGrid1.DataBind();  
   


  (8) 新增記錄  
  以下程式碼向XML檔案中新增了一條記錄,同時給7個列賦值:  
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" //婚否欄位值  
});  
   


  如果b返回值為true,表示新增成功,否則表示新增失敗。以上的寫法我用了些偷懶的方法,比如我把陣列直接放在引數,而沒有另外申明,事實上你可以另外申明一個陣列,然後再傳到方法中。  
  請注意欄位在陣列中的位置和值在陣列中的位置的對應關係。  

  (9) 修改記錄  
  以下程式碼將找到peopleNum列值為3的行,然後將行的name、peopleNum、、description和IsMarried四個欄位的值分別更新成kgdiwss、10、描述、true。  
bool b;  
b = OperateXmlByDataSet.UpdateXmlRow(  
@"xml/xml_xmlDB.xml",  
new string[]{"name","peopleNum","description","IsMarried"},  
new string[]{"kgdiwss","10","描述","true"},  
"peopleNum",  
"3");  
   


  返回true表示修改成功,否則表示修改失敗。  
  請特別注意,欄位型別為邏輯型時,賦值用的是true和false,而不是0和1。  

  (10) 刪除記錄  
  以下程式碼實現刪除name列值為陣列中的值的行。  
bool b;  
b = OperateXmlByDataSet.DeleteXmlRows(  
@"xml/xml_xmlDB.xml", //XML檔案路徑  
"name", //條件列  
new string[]{  
"值1", //條件值1  
"值2", //條件值2  
"值3" //條件值3  
});  
   


  上面程式碼執行成功後,name列值為值1、值2、值3的行將被刪除。  
  刪除成功返回true,否則返回false。  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17140602/viewspace-605222/,如需轉載,請註明出處,否則將追究法律責任。

相關文章