——此文章摘自《C#高級編程(第
版)》定價
元 特價
元 購買
XmlDocument及其派生類XmlDataDocument(詳見本章後面的內容)是用於在NET中表示DOM的類與XmlReader 和 XmlWriter不同XmlDocument具有讀寫功能並可以隨機訪問DOM樹XmlDocument類似於MSXML中的DOM執行方式如果您用MSXML編過程序就會覺得使用XmlDocument很合適
下面介紹的示例創建一個XmlDocument對象加載磁盤上的一個文檔再從標題元素中加載帶有數據的列表框這類似於XmlReader一節的示例區別是本例選擇要使用的節點而不是像XmlReader示例那樣浏覽整個文檔
下面是該示例的代碼與XmlReader示例相比這個示例是比較簡單的(該文件在下載的DOMSample文件夾中)
private void button_Click(object sender SystemEventArgs e)
{
// doc is declared at the module level
// change path to match your path structure
docLoad(\\\\\\booksxml);
// get only the nodes that we want
XmlNodeList nodeLst=docGetElementsByTagName(title);
// iterate through the XmlNodeList
foreach(XmlNode node in nodeLst) listBoxItemsAdd(nodeInnerText);
}
注意我們在本節的示例中添加了模塊級的聲明
private XmlDocument doc=new XmlDocument();
如果這就是我們需要完成的工作使用XmlReader加載列表框就是一種非常高效的方式原因是我們只浏覽一次文檔就完成了處理這就是XmlReader的工作方式但如果要重新查看某個節點最好使用XmlDocument擴展該示例添加另一個事件處理程序(即DOMSample)
private void listBox_SelectedIndexChanged(object sender SystemEventArgs e)
{
//create XPath search string
string srch=bookstore/book[title= + listBoxSelectedItemToString()
+ ];
//look for the extra data
XmlNode foundNode = docSelectSingleNode(srch);
if(foundNode != null)
MessageBoxShow(foundNodeInnerText);
else
MessageBoxShow(Not found);
}
在這個示例中與上一個示例一樣從booksxml 文檔中加載了帶有標題的列表框單擊列表框會引發SelectedIndexChanged()事件獲取列表框中所選項的文本(書名)創建一個XPath 語句把它傳送給doc對象的SelectSingleNode() 方法該方法返回title是書名的一部分的book元素(foundNode)在消息框中顯示節點的InnerText繼續單擊列表框中的項目此時文檔已經加載且一直到釋放它之前它都處於已加載狀態
下面簡要介紹一下SelectSingleNode()方法它是XmlDocument類的Xpath實現SelectSingleNode ()和 SelectNodes()都是在XmlNode中定義的而XmlDocument是基於XmlNode的SelectSingleNode()返回一個XmlNodeSelectNodes()返回一個XmlNodeListSystemXmlXPath命名空間包含許多Xpath實現後面的一節會介紹它們
插入節點
前面的示例使用XmlTextWriter創建一個新文檔其局限性是不能把節點插入到當前文檔中而使用XmlDocument類可以做到這一點把上一個示例中的button_Click()事件處理程序作如下改動(在下載代碼的DOMSample中)
[] [] []
From:http://tw.wingwit.com/Article/program/net/201311/14751.html