C# 讀取xml

1.加載一個xml

 XmlDocument xmlDocument = new XmlDocument();

string path =System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Config/JsCss.xml";//表示當前解決方案下的路徑

 string path = AppDomain.CurrentDomain.BaseDirectory + "Content/XML/Web.xml";//表示當前項目下的路徑

//加載xml文檔...
xmlDocument.Load(path);


2.讀取一個節點

xmlDocument.SelectSingleNode("RESULT");//返回一個XmlNode類型

xmlNode.SelectNodes("jsFile");//返回一個XmlNodeList集合

3.讀取一個節點的屬性值

((XmlElement)xmlNode).GetAttribute("name");

//也可以這樣

xmlNode.Attributes[0]//屬性數組訪問 string path = AppDomain.CurrentDomain.BaseDirectory + "Content/XML/Web.xml";


《API》

一、xmlnode類節點:
xmlnode類表示xml文檔中的單個節點,其命名空間爲:System。Xml
XmlNode的三個最主要的子類包括:XmlDocument、XmlDataDocument及XmlDocumentFragment
1.XmlNode類的屬性:
public virtual bool HasChildNodes {get;} 獲取一個值,該值指示當前節點是否有任何子節點
  public virtual XmlNodeList ChildNodes {get;} 獲取當前節點的所有子節點
  public virtual XmlNode FirstChild {get;} 獲取當前節點的第一個子級
  public virtual XmlNode LastChild {get;} 獲取當前節點的最後一個子級
  public virtual XmlNode ParentNode {get;} 獲取當前節點的父級
  public virtual XmlNode NextSibling {get;} 獲取當前節點的下一個兄弟節點
  public virtual XmlNode PreviousSibling {get;} 獲取當前節點的上一個兄弟節點
  public virtual string InnerText {get; set;} 獲取或設置當前節點及其所有子節點的文本內容的串聯值
  public virtual string InnerXml {get; set;} 獲取或設置僅代表當前節點的子節點的標記
  public virtual string OuterXml {get;} 獲取表示當前節點及其所有子節點的標記
public virtual string Attributes{get;} 獲取一個XmlAttributeCollection ,包含該節點的屬性
public virtual string Item{get;set;} 獲取指定的子元素
XmlNode類的常用方法
publlic virtual XmlNodeList SelectNodes(string); 選擇文檔中匹配 XPath 表達式的節點列表
  publlic virtual XmlNode SelectSingleNode(string); 選擇文檔中匹配 XPath 表達式的第一個 XmlNode
  public virtual XmlNode AppendChild(XmlNode newChild) 將指定的節點添加到該節點的子節點列表的末尾
  public virtual XmlNode PrependChild(XmlNode newChild)將指定的節點添加到該節點的子節點列表的開頭
  public virtual XmlNode RemoveChild(XmlNode oldChild) 移除指定的子節點
  public virtual XmlNode ReplaceChild(XmlNode newChild,XmlNode oldChild) 用 newChild 節點替換子節點 oldChild
public virtual bool equals() 確定兩個object實例是否相等
public virtual bool ReferenceEquals() 確定指定的Object 實例是否是相同的實例
public virtual string ToString() 返回當前object的string
public virtual bool XmlNode() 當在派生類中被重寫時,該節點的所有字節點會保存到指定的XmlWriter中
二. XmlNodeList類:
  該類表示XmlNode的有序集合,它有以下常用成員:
  Count——以整數形式返回XmlNodeList中的節點數
  ItemOf——搜索在指定索引處的節點
  GetEnumerator()——提供迭代遍歷節點列表的foreach樣式
  Item()——返回參數指定的索引處的節點
三.XmlDocument類
XmlDocument類的對象代表了一個XML文檔
1. XmlDocument類的屬性:
Attributes ——包含節點屬性
ChildNodes——獲取節點的所有子節點
DocumentElement——獲取文檔的根XmlElement
DocumentType——獲取包含doctype聲明的節點
FirstChild——獲取節點的第一個子級
LastChild——獲取節點的最後一個子級
ParentNode——獲取該節點的父級
HasChildNodes——獲取一個值,該值指示當前節點是否有任何子節點
InnerText ——獲取或設置當前節點及其所有子節點的文本內容的串聯值
 InnerXml——獲取或設置僅代表當前節點的子節點的標記
OuterXml ——獲取表示當前節點及其所有子節點的標記
Item——獲取指定的子元素
value——獲取或設置節點的值
2.XmlDocument類常用方法
Save——將XML文檔保存到指定的位置
CreateAttribute——創建此節點的一個副本
createElement_x——創建XmElement
CreateNode——創建XmlNode
CreateTextNode——創建具有指定文本的XmlText
GetType——獲取當前實例的Type
ImportNode——將節點從另一個文檔導入到當前文檔
InsertAfter——將指定的節點緊接着插入指定的引用節點之後
InsertBefore——將指定的節點緊接着插入指定的引用節點之前
Load——加載指定的xml數據
LoadXml——從指定的字符串加載xml文檔
SelectNodes——選擇文檔中匹配 XPath 表達式的節點列表
   SelectSingleNode——選擇文檔中匹配 XPath 表達式的第一個 XmlNode
   AppendChild——將指定的節點添加到該節點的子節點列表的末尾
   PrependChild——將指定的節點添加到該節點的子節點列表的開頭
   RemoveChild——移除指定的子節點
   ReplaceChild——用 newChild 節點替換子節點 oldChild
3.XmlDocument類常用Public事件
NodeChaged——當屬於該文檔的節點的Value已被更改時發生
NodeChaging——當屬於該文檔的節點的Value將被更改時發生
NodeInserted——當屬於該文檔的節點已被插入另一個節點時發生
NodeInserting——當屬於該文檔的節點已將插入另一個節點時發生
NodeRemoved——當屬於該文檔的節點已被從其父級移除時發生
NodeRemoved——當屬於該文檔的節點將被從其父級移除時發生
實例:
界面輸入聯繫人信息保存到xml文件中
protected void Page_Load(object sender, EventArgs e)
...{

}
private void SaveXMLData_nodemode()
...{
try
...{
//創建一個XmlDocument對象,用於載入存儲信息的xml文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load(Server.MapPath("phonobood.xml"));
//創建一個新的menber節點並將它添加到根節點下
XmlElement parenetNode = xdoc.createElement_x("member");
xdoc.DocumentElement.PrependChild(parenetNode);
//創建所有用於存儲信息的節點
XmlElement nameNode = xdoc.createElement_x("name");
XmlElement telphoneNode = xdoc.createElement_x("telphone");
XmlElement qqNode = xdoc.createElement_x("qq");
//XmlElement msnNode = xdoc.createElement_x("msn");

//獲取文本信息
XmlText nameText = xdoc.CreateTextNode(Request.Form.Get("name"));
XmlText telphoneText = xdoc.CreateTextNode(Request.Form.Get("telphone"));
XmlText qqText = xdoc.CreateTextNode(Request.Form.Get("qq"));
//將上面創建的各個存儲信息的節點添加到menber節點下,但並不包含最終的值
parenetNode.AppendChild(nameNode);
parenetNode.AppendChild(telphoneNode);
parenetNode.AppendChild(qqNode);
//將上面獲取的文本信息添加到與之相對應的節點中
nameNode.AppendChild(nameText);
telphoneNode.AppendChild(telphoneText);
qqNode.AppendChild(qqText);
//保存存儲信息的xml文件
xdoc.Save(Server.MapPath("phonebood.xml"));

}
catch (exception se)
...{
Console.WriteLine(se.Message);
}

}


XmlNode和XmlElement。這兩個類的功能極其類似:
1、通過繼承關係XmlElement繼承自XmlLinkedNode又繼承自XmlNode類,由此可知XmlElement是XmlNode的子類。我們知道子類繼承了父類所有的屬性和方法,因此,XmlNode所擁有的方法和屬性,在XmlElement類中也是可以使用的。
2、XmlElement是特殊的XmlNode類,Xml節點有多種類型:屬性節點、註釋節點、文本節點、元素節點等。也就是XmlNode是這多種節點的統稱。但是XmlElement專門指的就是元素節點。
3、XmlElement是具現類,可以直接實例化,而XmlNode是抽象類,必須通過XmlDocument實例通過CreateNode創建。
4、XmlElement擁有衆多對Attribute的操作方法,可以方便的對其屬性進行讀寫操作(XmlNode也可以通過Attributes屬性獲取屬性列表)。
5、在網上看到有人這麼評論這兩個類的區別:XmlNode包含子節點,XmlElement只包含屬性及其本身不含有子節點。但是我通過代碼測試,發現即使是XmlElement,也可以通過ChildNodes來獲取子節點列表。雖然在斷點中斷模式下,我並沒有發現XmlElement有ChildNodes屬性。舉例如下:
//是XmlNode也是XmlElement,但是img以及aspnet.jpg只是XmlNode
       //既是XmlNode 也是XmlElement   
           C#      //只是XmlNode   
          

也就是元素節點可以相應轉換爲XmlElement,這樣既可以使用XmlNode的功能,也可以使用它特有的對屬性的操作方法。
任意節點都可以使用XmlNode,因爲XmlNode是所有Node的父類。


 


=================================================================================


 


System.Xml.XmlNode System.Xml.XmlLinkedNode System.Xml.XmlElement從結構上講.XmlElement是XmlNode 派生類. 所以兩者比較沒什麼意義. 1.XmlNode 爲抽像類, 不能直接實例化.

發佈了23 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章