已知有一個XML文件(bookstore
Corets
往節點中插入一個節點
XmlDocument xmlDoc=new XmlDocument();
xmlDoc
XmlNode root=xmlDoc
XmlElement xe
xe
xe
XmlElement xesub
xesub
xe
XmlElement xesub
xesub
xe
XmlElement xesub
xesub
xe
root
xmlDoc
結果為
Corets
候捷
將genre屬性值為
XmlNodeList nodeList=xmlDoc
foreach(XmlNode xn in nodeList)//遍歷所有子節點
{
XmlElement xe=(XmlElement)xn;//將子節點類型轉換為XmlElement類型
if(xe
{
xe
XmlNodeList nls=xe
foreach(XmlNode xn
{
XmlElement xe
if(xe
{
xe
break;//找到退出來就可以了
}
}
break;
}
}
xmlDoc
最後結果為
Corets
亞勝
節點的genre屬性
XmlNodeList xnl=xmlDoc
foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
if(xe
{
xe
}
else if(xe
{
xe
}
}
xmlDoc
最後結果為
Corets
XmlNode xn=xmlDoc
XmlNodeList xnl=xn
foreach(XmlNode xnf in xnl)
{
XmlElement xe=(XmlElement)xnf;
Console
Console
XmlNodeList xnf
foreach(XmlNode xn
{
Console
}
}
loading
一個通過DataSet操作XML的類(源代碼)
using System;
using System
using System
using System
//***************************************
// 作者: ∮明天去要飯
// QICQ:
//
//
//***************************************
namespace YSTRP
{
///
/// OperateXmlByDataSet 的摘要說明
///
public class OperateXmlByDataSet
{
public OperateXmlByDataSet()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
#region GetDataSetByXml
///
/// 讀取xml直接返回DataSet
///
/// xml文件相對路徑
///
public static DataSet GetDataSetByXml(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
ds
if(ds
{
return ds;
}
return null;
}
catch(Exception ex)
{
System
return null;
}
}
#endregion
#region GetDataViewByXml
///
/// 讀取Xml返回一個經排序或篩選後的DataView
///
///
/// 篩選條件
/// 排序條件
///
public static DataView GetDataViewByXml(string strXmlPath
{
try
{
DataSet ds = new DataSet();
ds
DataView dv = new DataView(ds
if(strSort != null)
{
dv
}
if(strWhere != null)
{
dv
}
return dv;
}
catch(Exception)
{
return null;
}
}
#endregion
#region WriteXmlByDataSet
///
/// 向Xml文件插入一行數據
///
/// xml文件相對路徑
/// 要插入行的列名數組
/// 要插入行每列的值數組
/// 成功返回true
public static bool WriteXmlByDataSet(string strXmlPath
{
try
{
//根據傳入的XML路徑得到
string strXsdPath = strXmlPath
DataSet ds = new DataSet();
//讀xml架構
ds
ds
DataTable dt = ds
//在原來的表格基礎上創建新行
DataRow newRow = dt
//循環給一行中的各個列賦值
for(int i=
{
newRow[Columns[i]] = ColumnValue[i];
}
dt
dt
ds
ds
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
#region UpdateXmlRow
///
/// 更行符合條件的一條Xml記錄
///
/// XML文件路徑
/// 列名數組
/// 列值數組
/// 條件列名
/// 條件列值
///
public static bool UpdateXmlRow(string strXmlPath
{
try
{
string strXsdPath = strXmlPath
DataSet ds = new DataSet();
//讀xml架構
ds
ds
//先判斷行數
if(ds
{
for(int i=
{
//如果當前記錄為符合Where條件的記錄
if(ds
{
//循環給找到行的各列賦新值
for(int j=
{
ds
}
//更新DataSet
ds
//重新寫入XML文件
ds
return true;
}
}
}
return false;
}
catch(Exception)
{
return false;
}
}
#endregion
#region DeleteXmlRowByIndex
///
/// 通過刪除DataSet中iDeleteRow這一行
///
///
/// 要刪除的行在DataSet中的Index值
public static bool DeleteXmlRowByIndex(string strXmlPath
{
try
{
DataSet ds = new DataSet();
ds
if(ds
{
//刪除符號條件的行
ds
}
ds
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
#region DeleteXmlRows
///
/// 刪除strColumn列中值為ColumnValue的行
///
/// xml相對路徑
/// 列名
/// strColumn列中值為ColumnValue的行均會被刪除
///
public static bool DeleteXmlRows(string strXmlPath
{
try
{
DataSet ds = new DataSet();
ds
//先判斷行數
if(ds
{
//判斷行多還是刪除的值多
if(ColumnValue
{
for(int i=
{
for(int j=
{
if(ds
{
ds
}
}
}
}
else
{
for(int j=
{
for(int i=
{
if(ds
{
ds
}
}
}
}
ds
}
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
#region DeleteXmlAllRows
///
/// 刪除所有行
///
/// XML路徑
///
public static bool DeleteXmlAllRows(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
ds
//如果記錄條數大於
if(ds
{
//移除所有記錄
ds
}
//重新寫入
ds
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
#region GetXmlFullPath
///
/// 返回完整路徑
///
/// Xml的路徑
///
public static string GetXmlFullPath(string strPath)
{
if(strPath
{
return strPath;
}
else
{
return Application
}
}
#endregion
}
}
loading
一個通過DataSet操作XML的類
這段時間寫的項目每次都要用到XML保存一些配置
其實用DataSet操作XML
(
本類操作的XML和生成的XML格式是一樣的
_xmlDB
開發B/S結構程序
c#等
建國路XXX
false
c#程序員
開發B/S結構程序
c#等
建國路XXX
false
然後點擊XML文件右下角的
_xmlDB
注意
首先在XML中添加一個元素
以上代碼如果看不懂並不要緊
(
這裡主要是對傳入的XML路徑進行處理
#region GetXmlFullPath
///
/// 返回完整路徑
///
/// Xml的路徑
///
public static string GetXmlFullPath(string strPath)
{
//如果路徑中含有:符號
if(strPath
{
return strPath;
}
else
{
//返回完整路徑
return System
}
}
#endregion
(
讀取XML的數據到DataSet中的方法為
#region GetDataSetByXml
///
/// 讀取xml直接返回DataSet
///
/// xml文件相對路徑
///
public static DataSet GetDataSetByXml(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
//讀取XML到DataSet
ds
if(ds
{
return ds;
}
return null;
}
catch(Exception)
{
return null;
}
}
#endregion
以上方法將得到一個DataSet
#region GetDataViewByXml
/// 〈summary〉
/// 讀取Xml返回一個經排序或篩選後的DataView
/// 〈/summary〉
/// 〈param name=
/// 〈param name=
/// 〈param name=
/// 〈returns〉〈/returns〉
public static DataView GetDataViewByXml(string strXmlPath
{
try
{
DataSet ds = new DataSet();
ds
//創建DataView來完成排序或篩選操作
DataView dv = new DataView(ds
if(strSort != null)
{
//對DataView中的記錄進行排序
dv
}
if(strWhere != null)
{
//對DataView中的記錄進行篩選
dv
}
return dv;
}
catch(Exception)
{
return null;
}
}
#endregion
(
到現在為止我們已經可以隨意讀取XML中的記錄
#region WriteXmlByDataSet
/// 〈summary〉
/// 向Xml文件插入一行數據
/// 〈/summary〉
/// 〈param name=
/// 〈param name=
/// 〈param name=
/// 〈returns〉成功返回true
public static bool WriteXmlByDataSet(string strXmlPath
{
try
{
//根據傳入的XML路徑得到
DataSet ds = new DataSet();
//讀xml架構
ds
ds
DataTable dt = ds
//在原來的表格基礎上創建新行
DataRow newRow = dt
//循環給 一行中的各個列賦值
for(int i=
{
newRow[Columns[i]] = ColumnValue[i];
}
dt
dt
ds
ds
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
可能有的朋友不知道怎麼用這個方法插入數據
(
修改記錄的方法要傳入的參數相對較多
#region UpdateXmlRow
/// 〈summary〉
/// 更行符合條件的一條Xml記錄
/// 〈/summary〉
/// 〈param name=
/// 〈param name=
/// 〈param name=
/// 〈param name=
/// 〈param name=
/// 〈returns〉〈/returns〉
public static bool UpdateXmlRow(string strXmlPath
{
try
{
//同上一方法
string strXsdPath = strXmlPath
DataSet ds = new DataSet();
//讀xml架構
ds
ds
//先判斷行數
if(ds
{
for(int i=
{
//如果當前記錄為符合Where條件的記錄if(ds
{
//循環給找到行的各列賦新值
for(int j=
{
ds
}
//更新DataSet
ds
//重新寫入XML文件
ds
return true;
}
}
}
return false;
}
catch(Exception)
{
return false;
}
}
#endregion
(
為了方便
Set中的Index值對應
#region DeleteXmlAllRows
/// 〈summary〉
/// 刪除所有行
/// 〈/summary〉
/// 〈param name=
/// 〈returns〉〈/returns〉
public static bool DeleteXmlAllRows(string strXmlPath)
{
try
{
DataSet ds = new DataSet();
ds
//如果記錄條數大於
if(ds
{
//移除所有記錄
ds
}
//重新寫入
ds
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
刪除指定Index值的行的方法為
#region DeleteXmlRowByIndex
/// 〈summary〉
/// 通過刪除DataSet中iDeleteRow這一行
/// 〈/summary〉
/// 〈param name=
/// 〈param name=
public static bool DeleteXmlRowByIndex(string strXmlPath
{
try
{
DataSet ds = new DataSet();
ds
if(ds
{
//刪除符號條件的行
ds
}
ds
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
這裡說一下提供此方法的原因
注意
有時候我們需要刪除符合條件的多行
#region DeleteXmlRows
/// 〈summary〉
/// 刪除strColumn列中值為ColumnValue的行
/// 〈/summary〉
/// 〈param name=
/// 〈param name=
/// 〈param name=
/// 〈returns〉〈/returns〉
public static bool DeleteXmlRows(string strXmlPath
{
try
{
DataSet ds = new DataSet();
ds
//先判斷行數
if(ds
{
//判斷行多還是刪除的值多
if(ColumnValue
{
for(int i=
{
for(int j=
{
//找到符合條件的行if(ds
{
//刪除行
ds
}
}
}
}
else
{
for(int j=
{
for(int i=
{
//找到符合條件的行if(ds
{
//刪除行
ds
}
}
}
}
ds
}
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
(
以下代碼讀取到一個沒有排序和篩選的DataSet
DataGrid
DataGrid
以下代碼讀到的數據是經過篩選和排序的
DataGrid
@
DataGrid
(
以下代碼向XML文件中添加了一條記錄
bool b;
b = OperateXmlByDataSet
@
new string[]{
}
new string[]{
DateTime
});
如果b返回值為true
請注意字段在數組中的位置和值在數組中的位置的對應關系
(
以下代碼將找到peopleNum列值為
bool b;
b = OperateXmlByDataSet
@
new string[]{
new string[]{
返回true表示修改成功
請特別注意
(
以下代碼實現刪除name列值為數組中的值的行
bool b;
b = OperateXmlByDataSet
@
new string[]{
});
上面代碼執行成功後
刪除成功返回true
另外兩種刪除的方法用法比較簡單
以上就是操作XML的所有方法
From:http://tw.wingwit.com/Article/program/net/201311/14004.html