http://www.loliman3000.com/tech/2fe13b6a38e0bab864d80365.php
http://www.tzwhx.com/NewShow/newClassCShow/XML%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B_133.html
http://www.tzwhx.com/NewShow/newClassShow/XML_13.html
已知有一個XML文件(bookstore.xml)如下:
Corets, Eva
5.95
1、插入節點
往節點中插入一個節點:
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屬性
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);
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”);
xmlDoc.Save(“bookstore.xml”);
結果為:
Corets, Eva
5.95
候捷
58.3
2、修改節點:
將genre屬性值為“李贊紅“的節點的genre值改為“update李贊紅”,將該節點的子節點的文本修改為“亞勝”。
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李贊紅”
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”);//保存。
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屬性,刪除 節點。
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”);
{
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、顯示所有數據。
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”));
{
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);//顯示子節點點文本
}
}
foreach(XmlNode xn2 in xnf1)
{
Console.WriteLine(xn2.InnerText);//顯示子節點點文本
}
}
loading…
一個通過DataSet操作XML的類(源代碼)
using System;
using System.Data;
using System.Xml;
using System.Windows.Forms;
using System.Data;
using System.Xml;
using System.Windows.Forms;
//***************************************
// 作者: ∮明天去要飯
// QICQ: 305725744
// .Net群: 6370988
// http://blog.csdn.net/kgdiwss
//***************************************
// 作者: ∮明天去要飯
// QICQ: 305725744
// .Net群: 6370988
// http://blog.csdn.net/kgdiwss
//***************************************
namespace YSTRP.Common
{
///
/// OperateXmlByDataSet 的摘要說明。
///
public class OperateXmlByDataSet
{
public OperateXmlByDataSet()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
{
///
/// 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
///
/// 讀取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”;
///
/// 向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();
//讀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();
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
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”;
///
/// 更行符合條件的一條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));
//讀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;
}
}
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
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
///
/// 通過刪除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));
///
/// 刪除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
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
///
/// 刪除所有行
///
/// 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
}
}
ASP.NET利用xpath來取得單一(SelectSingleNode)或多個(SelectNodes)xml node的運用
小弟最近在討論區看到很多人問有關xml的問題…就給它記錄在我的blog裡…
假設有一個xml檔內容如下..
01 | <?xml version=”1.0″ encoding=”utf-8″ ?> |
02 | <A> |
03 | <B> |
04 | <C c1=”東京”>JAPAN</C> |
05 | </B> |
06 | <B> |
07 | <C c1=”台北”>TAIWAN</C> |
08 | <C c1=”台南”>TAIWAN</C> |
09 | </B> |
10 | <B> |
11 | <C c1=”北京”>CHINA</C> |
12 | </B> |
13 | </A> |
要如何取出xml檔某結點裡的內容或屬性內容….下面有一個簡單的範例..使用xpath作法…
asp.net(c#)部分程式碼
01 | using System; |
02 | using System.Collections; |
03 | using System.Configuration; |
04 | using System.Data; |
05 | using System.Web; |
06 | using System.Web.Security; |
07 | using System.Web.UI; |
08 | using System.Web.UI.HtmlControls; |
09 | using System.Web.UI.WebControls; |
10 | using System.Web.UI.WebControls.WebParts; |
11 | using System.Xml; |
12 |
13 | public partial class XPATH : System.Web.UI.Page |
14 | { |
15 | protected void Page_Load(object sender, EventArgs e) |
16 | { |
17 | XmlDocument xmldoc = new XmlDocument(); |
18 | xmldoc.Load(Server.MapPath(“XML.xml”));//載入xml檔 |
19 |
20 | string xPathExpression1 = “/A/B/C[.=’TAIWAN’]”;//找node裡有’TAIWAN’ |
21 | XmlNodeList nodelist = xmldoc.SelectNodes(xPathExpression1);//multi node |
22 |
23 | string xPathExpression2 = “/A/B/C[@c1=’台北’]”;//找node屬性有’台北’ |
24 | XmlNode node = xmldoc.SelectSingleNode(xPathExpression2);//single node |
25 |
26 | //輸出結果:TAIWAN |
27 | Response.Write(node.OuterXml); |
28 |
29 | Response.Write(“<p>”); |
30 |
31 | //輸出結果:台北台南 |
32 | foreach (XmlNode item in nodelist) |
33 | { |
34 | Response.Write(item.Attributes[“c1”].Value); |
35 | Response.Write(“<br/” + “>”); |
36 | } |
37 | } |
38 | } |
執行結果:
參考網址:
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080813032057V4N&fumcde=FUM20041006161839LRJ
http://www.java2s.com/Code/CSharp/XML/ReadXMLnodeusingtheXMLpath.htm
http://www.java2s.com/Code/CSharp/XML/ReadXMLnodeusingtheXMLpath.htm