C# XML操作 代碼大全(讀XML,寫XML,更新,刪除節(jié)點(diǎn),與dataset結(jié)合等)第1/2頁(yè)
Corets, Eva
5.95
1、插入節(jié)點(diǎn)
往節(jié)點(diǎn)中插入一個(gè)節(jié)點(diǎn):
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找
XmlElement xe1=xmlDoc.CreateElement("book");//創(chuàng)建一個(gè)節(jié)點(diǎn)
xe1.SetAttribute("genre","李贊紅");//設(shè)置該節(jié)點(diǎn)genre屬性
xe1.SetAttribute("ISBN","2-3631-4");//設(shè)置該節(jié)點(diǎn)ISBN屬性
XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="CS從入門到精通";//設(shè)置文本節(jié)點(diǎn)
xe1.AppendChild(xesub1);//添加到節(jié)點(diǎn)中
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);//添加到節(jié)點(diǎn)中
xmlDoc.Save("bookstore.xml");
結(jié)果為:
Corets, Eva
5.95
候捷
58.3
2、修改節(jié)點(diǎn):
將genre屬性值為“李贊紅“的節(jié)點(diǎn)的genre值改為“update李贊紅”,將該節(jié)點(diǎn)的子節(jié)點(diǎn)的文本修改為“亞勝”。
XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//獲取bookstore節(jié)點(diǎn)的所有子節(jié)點(diǎn)
foreach(XmlNode xn in nodeList)//遍歷所有子節(jié)點(diǎn)
{
XmlElement xe=(XmlElement)xn;//將子節(jié)點(diǎn)類型轉(zhuǎn)換為XmlElement類型
if(xe.GetAttribute("genre")=="李贊紅")//如果genre屬性值為“李贊紅”
{
xe.SetAttribute("genre","update李贊紅");//則修改該屬性為“update李贊紅”
XmlNodeList nls=xe.ChildNodes;//繼續(xù)獲取xe子節(jié)點(diǎn)的所有子節(jié)點(diǎn)
foreach(XmlNode xn1 in nls)//遍歷
{
XmlElement xe2=(XmlElement)xn1;//轉(zhuǎn)換類型
if(xe2.Name=="author")//如果找到
{
xe2.InnerText="亞勝";//則修改
break;//找到退出來(lái)就可以了
}
}
break;
}
}
xmlDoc.Save("bookstore.xml");//保存。
最后結(jié)果為:
Corets, Eva
5.95
亞勝
58.3
3、刪除節(jié)點(diǎn)
節(jié)點(diǎn)的genre屬性,刪除 節(jié)點(diǎn)。
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();//刪除該節(jié)點(diǎn)的全部?jī)?nèi)容
}
}
xmlDoc.Save("bookstore.xml");
最后結(jié)果為:
Corets, Eva
5.95
4、顯示所有數(shù)據(jù)。
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);//顯示子節(jié)點(diǎn)點(diǎn)文本
}
}
loading...
一個(gè)通過(guò)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 的摘要說(shuō)明。
///
public class OperateXmlByDataSet
{
public OperateXmlByDataSet()
{
//
// TODO: 在此處添加構(gòu)造函數(shù)邏輯
//
}
#region GetDataSetByXml
///
/// 讀取xml直接返回DataSet
///
/// xml文件相對(duì)路徑
///
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返回一個(gè)經(jīng)排序或篩選后的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文件插入一行數(shù)據(jù)
///
/// xml文件相對(duì)路徑
/// 要插入行的列名數(shù)組,如:string[] Columns = {"name","IsMarried"};
/// 要插入行每列的值數(shù)組,如:string[] ColumnValue={"明天去要飯","false"};
/// 成功返回true,否則返回false
public static bool WriteXmlByDataSet(string strXmlPath,string[] Columns,string[] ColumnValue)
{
try
{
//根據(jù)傳入的XML路徑得到.XSD的路徑,兩個(gè)文件放在同一個(gè)目錄下
string strXsdPath = strXmlPath.Substring(0,strXmlPath.IndexOf(".")) + ".xsd";
DataSet ds = new DataSet();
//讀xml架構(gòu),關(guān)系到列的數(shù)據(jù)類型
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
ds.ReadXml(GetXmlFullPath(strXmlPath));
DataTable dt = ds.Tables[0];
//在原來(lái)的表格基礎(chǔ)上創(chuàng)建新行
DataRow newRow = dt.NewRow();
//循環(huán)給一行中的各個(gè)列賦值
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文件路徑
/// 列名數(shù)組
/// 列值數(shù)組
/// 條件列名
/// 條件列值
///
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架構(gòu),關(guān)系到列的數(shù)據(jù)類型
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
ds.ReadXml(GetXmlFullPath(strXmlPath));
//先判斷行數(shù)
if(ds.Tables[0].Rows.Count > 0)
{
for(int i=0; i< ds.Tables[0].Rows.Count; i++)
{
//如果當(dāng)前記錄為符合Where條件的記錄
if(ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue))
{
//循環(huán)給找到行的各列賦新值
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
///
/// 通過(guò)刪除DataSet中iDeleteRow這一行,然后重寫Xml以實(shí)現(xiàn)刪除指定行
///
///
/// 要?jiǎng)h除的行在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)
{
//刪除符號(hào)條件的行
ds.Tables[0].Rows[iDeleteRow].Delete();
}
ds.WriteXml(GetXmlFullPath(strXmlPath));
return true;
}
catch(Exception)
{
return false;
}
}
#endregion
#region DeleteXmlRows
///
/// 刪除strColumn列中值為ColumnValue的行
///
/// xml相對(duì)路徑
/// 列名
/// strColumn列中值為ColumnValue的行均會(huì)被刪除
///
public static bool DeleteXmlRows(string strXmlPath,string strColumn,string[] ColumnValue)
{
try
{
DataSet ds = new DataSet();
ds.ReadXml(GetXmlFullPath(strXmlPath));
//先判斷行數(shù)
if(ds.Tables[0].Rows.Count > 0)
{
//判斷行多還是刪除的值多,多的for循環(huán)放在里面
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));
//如果記錄條數(shù)大于0
if(ds.Tables[0].Rows.Count > 0)
{
//移除所有記錄
ds.Tables[0].Rows.Clear();
}
//重新寫入,這時(shí)XML文件中就只剩根節(jié)點(diǎn)了
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...
相關(guān)文章
asp.net Page.EnableEventValidation 屬性驗(yàn)證服務(wù)器控件的回發(fā)和回調(diào)事件出現(xiàn)的錯(cuò)誤
Page.EnableEventValidation 屬性驗(yàn)證服務(wù)器控件的回發(fā)和回調(diào)事件出現(xiàn)的錯(cuò)誤前兩天用jQuery做了一個(gè)包含DropDownList聯(lián)動(dòng)的頁(yè)面,數(shù)據(jù)通過(guò)Ajax請(qǐng)求得到的。2010-10-10
深入本機(jī)影像生成器(Ngen.exe)工具使用方法詳解
本篇文章是對(duì)本機(jī)影像生成器(Ngen.exe)工具使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
asp.net利用Ajax和Jquery在前臺(tái)向后臺(tái)傳參數(shù)并返回值的實(shí)例
asp.net利用Ajax和Jquery在前臺(tái)向后臺(tái)傳參數(shù)并返回值的實(shí)例,需要的朋友可以參考一下2013-05-05
http轉(zhuǎn)https的實(shí)戰(zhàn)記錄(iis 7.5)
這篇文章主要給大家介紹了關(guān)于http轉(zhuǎn)https的相關(guān)資料,文中是最近的一次實(shí)戰(zhàn)記錄,基于iis7.5,通過(guò)一步步的圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2018-01-01
Asp.net圖片上傳實(shí)現(xiàn)預(yù)覽效果的簡(jiǎn)單代碼
這篇文章介紹了Asp.net圖片上傳實(shí)現(xiàn)預(yù)覽效果的簡(jiǎn)單代碼,有需要的朋友可以參考一下2013-07-07
.NET?Core?實(shí)現(xiàn)一個(gè)自定義日志記錄器
在應(yīng)用程序中,日志記錄是一個(gè)至關(guān)重要的功能,不僅有助于調(diào)試和監(jiān)控應(yīng)用程序,還能幫助我們了解應(yīng)用程序的運(yùn)行狀態(tài),所以本文就將使用.NET?Core?實(shí)現(xiàn)一個(gè)自定義日志記錄器,需要的可以參考下2024-12-12
.NET發(fā)送郵件的實(shí)現(xiàn)方法示例
這篇文章主要給大家介紹了關(guān)于.NET發(fā)送郵件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.net具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
.NET 8 強(qiáng)大功能 IHostedService 與 Backgr
.NET 8 中的 IHostedService 和 BackgroundService 提供了強(qiáng)大的工具集,使定時(shí)任務(wù)、后臺(tái)處理以及定期維護(hù)等功能的實(shí)現(xiàn)變得更加直接、高效和靈活,感興趣的朋友跟隨小編一起看看吧2024-11-11
ASP.NET MVC5使用MiniProfiler監(jiān)控MVC性能
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC5使用MiniProfiler監(jiān)控MVC性能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

