DataSet 和 DataTable都有現(xiàn)成的方法:WriteXml
創(chuàng)新互聯(lián)建站主營海滄網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),海滄h5成都微信小程序搭建,海滄網(wǎng)站營銷推廣歡迎海滄等地區(qū)企業(yè)咨詢
DataTable tb = this.dataGridView1.DataSource as DataTable;
if(tb != null)
{
tb.WriteXml(@"C:\table.xml",true);
return;
}
DataView dv = this.dataGridView1.DataSource as DataView;
if(dv != null)
{
dv.Table.WriteXml(@"C:\table.xml",true);
return;
}
IList list = this.dataGridView1.DataSource as IList;
if(list != null)
{
//to do,如果是IList,就要你自己想辦法導(dǎo)出了
//XmlDocument or XmlWriter都可以考慮
}
使用DataSet類來完成這項(xiàng)任務(wù)。
DataSet對象在傳輸時(shí),是以XML流的形式而不是以COM形式傳輸?shù)摹ataSet對象可以讀取XML數(shù)據(jù)文件或者數(shù)據(jù)流,從而將樹型結(jié)構(gòu)的XML數(shù)據(jù)轉(zhuǎn)換成關(guān)系型的數(shù)據(jù),如表(DataTable)、列(DataColumn)、行(DataRow)等。
在這個(gè)實(shí)例中,我們將XML文件命名為“xmlfile.xml”,具體內(nèi)容如下:
?xml version=\"1.0\"standalone=”yes”?
Detail
Person
NameManish/Name
Age22/Age
/Person
/Detail \'用VB.NET讀寫XML文件
C1aSS WriteXML
Shared Sub main()
Dim obj DataSet As New System.Data.DataSet()
Dim strVirtualPath As String=”t.xml”
\'載入XML文件DataSet
objDataSet.ReadXml(”xmlfile.xml”)
\'通過控制器讀取XML內(nèi)容
Console.Write(objDataSet.GetXml)
\'從原XML文件中得到數(shù)據(jù)
ConSOle.Write(”Enter Name:”)
Dim fname,age As String
fname=ConS01e.ReadLine
\'寫入你希望的代碼
ConS01e.Write(”Enter Age:”)
age=Console.ReadLine
ConS0le.Write(fname&age)
Dim v(1)As String
v(0)=fname
V(1)=age
\'增加數(shù)據(jù)DataSet
objDataSet.Tables(0).Rows.Add(V)
\'更新XML文件
objDataSet.WriteXml(”xmlfile.xml”)
Console.Write(obj DataSet.GetXml)
End Sub
End C1ass
運(yùn)行該程序有兩種方式,一種是在Microso~VS.NET框架中編譯完后運(yùn)行;另一種則是在仿DOS的Command窗口中運(yùn)行。在第一種方式中,必須加上System、System.Data、System.xML的引用。具體方法為:先創(chuàng)建一個(gè)空的項(xiàng)目,然后加入這個(gè)文件名字;在“解決方案資源管理器”中加入引用,此時(shí)需要選擇相應(yīng)的.dll文件;注意,xmlfile.xml文件應(yīng)該放在工程的/bin目錄下面。我們可以輸出結(jié)果也可以用瀏覽器直接查看改變后的XML文件。在第二種方式中,選擇桌面的“程序”一“Microso~Visual Studio.NET”一“VisualStudio.NET工具”一“Visual Studio.NET命令提示”命令,在DOS命令提示框敲入命令:[Page]
vbc/r:system.d11/r:system.data.d11/r:system.xml.d11 xml.vb其中,程序名為xml.vb,這里的3個(gè).dll文件都是必須調(diào)用的庫文件。應(yīng)該在存放VB.NET文件的目錄中運(yùn)行上述命令,否則找不到相應(yīng)的程序,當(dāng)然設(shè)置PATH也可以做到。此外,Xml_vb文件應(yīng)該和XML文件放在同一目錄下面。每次運(yùn)行此程序都會往文件中寫進(jìn)同樣的內(nèi)容,都是寫入Person/,運(yùn)行一次寫一行。其實(shí),我們只要稍微修改一下這個(gè)程序,就可以往XML中寫入我們所需要的數(shù)據(jù)。
Dim?xmlDoc?As?New?System.Xml.XmlDocument
xmlDoc.Load("c:\xml.xml")?'載入xml文件
Dim?Items?As?Xml.XmlNodeList?=?xmlDoc.DocumentElement.SelectNodes("http://record/item")?'參數(shù)為xpath查詢串,前面斜杠,//:表示任何結(jié)點(diǎn),/:表示根結(jié)點(diǎn)
For?Each?s?As?Xml.XmlNode?In?Items
Console.WriteLine(s.Attributes.GetNamedItem("id").Value??vbTab??s.InnerText)
Next
這個(gè)應(yīng)該沒有問題的。看起來比較輕松的。。
代碼調(diào)試正確
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Web;
using
System.Web.SessionState;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.HTMLControls;
using
System.XML;
private
XMLDocument
XMLDoc;
//load
XML
file
private
void
LoadXML()
{
XMLDoc=new
XMLDocument();
XMLDoc.Load(Server.MapPath("User.XML"));
}
//添加節(jié)點(diǎn)
private
void
AddElement()
{
LoadXML();
XMLNode
XMLdocSelect=XMLDoc.SelectSingleNode("user");
XMLElement
el=XMLDoc.CreateElement("person");
//添加person節(jié)點(diǎn)
el.SetAttribute("name","風(fēng)云");
//添加person節(jié)點(diǎn)的屬性"name"
el.SetAttribute("sex","女");
//添加person節(jié)點(diǎn)的屬性
"sex"
el.SetAttribute("age","25");
//添加person節(jié)點(diǎn)的屬性
"age"
XMLElement
xesub1=XMLDoc.CreateElement("pass");
//添加person節(jié)點(diǎn)的里的節(jié)點(diǎn)
xesub1.InnerText="123";//設(shè)置文本節(jié)點(diǎn)
el.AppendChild(xesub1);
XMLElement
xesub2=XMLDoc.CreateElement("Address");
xesub2.InnerText="昆明";//設(shè)置文本節(jié)點(diǎn)
el.AppendChild(xesub2);
XMLdocSelect.AppendChild(el);
XMLDoc.Save(Server.MapPath("user.XML"));
}
//修改節(jié)點(diǎn)
private
void
UpdateElement()
{
LoadXML();
XMLNodeList
nodeList=XMLDoc.SelectSingleNode("user").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("name")=="風(fēng)云")//如果name屬性值為“風(fēng)云”
{
xe.SetAttribute("name","發(fā)明");
//如果下面有子節(jié)點(diǎn)在下走
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=="pass")//如果找到
{
xe2.InnerText="66666";//則修改
break;
}
}
break;
}
}
XMLDoc.Save(Server.MapPath("user.XML"));//保存
}
//刪出節(jié)點(diǎn)
private
void
deleteNode()
{
LoadXML();
XMLNodeList
xnl=XMLDoc.SelectSingleNode("user").ChildNodes;
foreach(XMLNode
xn
in
xnl)
{
XMLElement
xe=(XMLElement)xn;
if(xe.GetAttribute("name")=="發(fā)明")
{
//xe.RemoveAttribute("name");//刪除name屬性
xe.RemoveAll();//刪除該節(jié)點(diǎn)的全部內(nèi)容
break;
}
}
XMLDoc.Save(Server.MapPath("user.XML"));//保存
}
private
void
showIt()
{
LoadXML();
XMLNode
xn=XMLDoc.SelectSingleNode("user");
XMLNodeList
xnl=xn.ChildNodes;
foreach(XMLNode
xnf
in
xnl)
{
XMLElement
xe=(XMLElement)xnf;
//
Console.WriteLine(xe.GetAttribute("name"));//顯示屬性值
//
Console.WriteLine(xe.GetAttribute("sex"));
//
//
XMLNodeList
xnf1=xe.ChildNodes;
//
foreach(XMLNode
xn2
in
xnf1)
//
{
//
Console.WriteLine(xn2.InnerText);//顯示子節(jié)點(diǎn)點(diǎn)文本
//
}
}
}
XML的樣式:
?xml
version="1.0"
encoding="gb2312"?
user
person
/person
person
name="風(fēng)拉"
sex="男"
age="25"
pass123/pass
Address大明/Address
/person
person
name="風(fēng)云"
sex="女"
age="25"
pass123/pass
Address昆明/Address
/person
/user
利用VB操作XML數(shù)據(jù)[出處不詳]
VB
作者 czqhh @ 2006-10-12 11:19:12
什么是XML
擴(kuò)展標(biāo)記語言XML是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然XML占用的空間比二進(jìn)制數(shù)據(jù)要占用更多的空間,但XML極其簡單易于掌握和使用。
XML與Access,Oracle和SQL Server等數(shù)據(jù)庫不同,數(shù)據(jù)庫提供了更強(qiáng)有力的數(shù)據(jù)存儲和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,XML僅僅是展示數(shù)據(jù)。事實(shí)上XML與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:他極其簡單。這是一個(gè)看上去有點(diǎn)瑣細(xì)的優(yōu)點(diǎn),但正是這點(diǎn)使XML與眾不同。
XML的簡單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的唯一公共語言,雖然不同的應(yīng)用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持XML,那就意味著程序可以更容易的與Windows、Mac OS, Linux以及其他平臺下產(chǎn)生的信息結(jié)合,然后可以很容易加載XML數(shù)據(jù)到程序中并分析他,并以XML格式輸出結(jié)果。
XML的優(yōu)點(diǎn)
我們談到XML長于在不同的應(yīng)用程序之間交換數(shù)據(jù),XML文件也便于構(gòu)建小的數(shù)據(jù)庫,不久以前,軟件都使用INI文件存儲配置信息、用戶參數(shù)以及其他信息,后來微軟引入了系統(tǒng)注冊表,接作微軟告訴我們不應(yīng)該再使用INI文件了,從那時(shí)起Visual Basic對INI文件的支持被削弱了。但不幸的是注冊表有幾個(gè)致命的缺點(diǎn):不是簡單的文本文件,難于讀寫、可能會變得龐大和緩慢、如果注冊表不知何故出現(xiàn)問題,將有可能造成系統(tǒng)死機(jī)。
將配置信息放在XML文件中可以避免這些問題,甚至可以將XML文件設(shè)置為一個(gè)共享文件,這樣在不同的計(jì)算機(jī)上的用戶就可以共享數(shù)據(jù),這是注冊表所不能比擬的。
在被稱為下一代ASP的ASP.NET中可以在WEB頁中直接使用XML,你可以使用數(shù)據(jù)綁定控件直接綁定數(shù)據(jù)并自動顯示。
當(dāng)然也可以不選擇XML,使用文本文件、注冊表、數(shù)據(jù)庫都可以完成XML所能完成的任務(wù),XML只是你在數(shù)據(jù)存儲和恢復(fù)的另一種工具而已。
XML語法簡介
XML的語法非常的簡單,XML文檔由節(jié)點(diǎn)組成,使用打開和關(guān)閉節(jié)點(diǎn)描述標(biāo)記,在格式上與HTML標(biāo)記非常相似,它們之間最大的不同是:XML中可以自由定義標(biāo)記名。比如下面的標(biāo)記就描述了一個(gè)電話號碼:
<Phone>987-654-3210</Phone>
而且不用聲明標(biāo)記名就可以使用。
開始和結(jié)束標(biāo)記必須相同,XML是識別大小寫的,所以標(biāo)記的大小寫也必須相同。比如上面的例子中以<Phone>標(biāo)記開始就必須以</Phone>標(biāo)記結(jié)束,而不能是</phone>或</PHONE>
節(jié)點(diǎn)標(biāo)記中可以包含屬性,比如下面的代碼中Phone節(jié)點(diǎn)包含屬性Type,其值為WorkFax:
<Phone Type="WorkFax">987-654-3210<Phone>
如果不愿意在節(jié)點(diǎn)中包含一個(gè)值,那么可以不需要結(jié)束標(biāo)記,可以用在開始標(biāo)記的后面加一個(gè)斜線來結(jié)束節(jié)點(diǎn),在下面的例子中,Phone標(biāo)記的Number屬性就存儲了一個(gè)電話號碼,所以就不需要一個(gè)結(jié)束標(biāo)記:
<Phone Type="WorkFax" Number="987-654-3210" />
XML文檔的結(jié)構(gòu)是一個(gè)樹形等級結(jié)構(gòu)。文檔必須有一個(gè)唯一的根結(jié)點(diǎn),根節(jié)點(diǎn)包含所有其它節(jié)點(diǎn)。下面我們舉一個(gè)較為完整的例子:
<Addresses>
<Entry Type="Personal">
<FirstName>Andy</FirstName>
<LastName>Fickle</LastName>
<Street>1234 Programmer Place</Street>
<City>Bugsville</City>
<State>CO</State>
<Zip>82379</Zip>
<Phone Type="Home">354-493-9489</Phone>
</Entry>
<Entry Type="Work">
<FirstName>Betty</FirstName>
<LastName>Masterson</LastName>
<Phone Type="Work">937-878-4958</Phone>
<Phone Type="WorkFax">937-878-4900</Phone>
</Entry>
...
</Addresses>
注意相似的節(jié)點(diǎn)不需要包含相同的信息,例如第一個(gè)Entry節(jié)點(diǎn)包含了地址信息和家庭電話號碼,第二個(gè)Entry節(jié)點(diǎn)包含了Work和WorkFax電話號碼,而沒有包含第一個(gè)Entry節(jié)點(diǎn)包含的信息。
XML工具
如前面的例子顯示,XML語法是如此的簡單以至于你可以在很短的時(shí)間作一個(gè)XML解析器,幸運(yùn)的是你不必這樣做,因?yàn)閄ML工具可以運(yùn)行在各種平臺上,包括可以安裝了Visual Basic的Windows。
正是這些L工具而不是XML本身使XML變得更強(qiáng)大和復(fù)雜。不同的解析器使你可以某一時(shí)刻加載整個(gè)XML文檔或只加載某個(gè)節(jié)點(diǎn),與此相反,XML Writer 可以同時(shí)創(chuàng)建一個(gè)XML文檔和節(jié)點(diǎn)。
DOM解析器使我們能夠很方便的加載、復(fù)制、排序、修改和存儲XML文件,遍歷節(jié)點(diǎn)獲得名稱或?qū)傩裕⒔o結(jié)果排序。雖然他們的功能沒有真正的關(guān)系數(shù)據(jù)庫強(qiáng)大,但DOM的這些特點(diǎn)依然非常有用。
XSD可以定義XML文檔的格式,XSL擴(kuò)展樣式單定義了怎樣將XML文檔轉(zhuǎn)換成其他可以在WEB瀏覽器中瀏覽的文件格式,比如HTML文件。
這些工具實(shí)際上比XML本身更復(fù)雜,所以所有講解XML的書籍都花了很大的篇幅解釋這些XML工具。但這超出了本文的范圍,有興趣的讀者可以參考有關(guān)資料。
Visual Basic.Net提供了使用XML、XSL以及其他XML工具的完整工具。但不用等待VB.NET,微軟XML核心服務(wù)(MSXML)版本4.0提供了從Visual Basic6.0加載和存儲XML文檔的工具。
在msdn.microsoft.com/xml/default.asp中下載最新版本的MSXML,并安裝在計(jì)算機(jī)上。在Visual Basic 6.0中使用Microsoft XML V4.0象引用其他對象一樣,首先在工程菜單中選擇引用菜單項(xiàng),選擇Microsoft V4.0,單擊OK,一切完成后就現(xiàn)在就可以在VB應(yīng)用程序中添加XML對象了。
DOMDocument 類
文檔對象模型(DOM)使用了一系列相應(yīng)的對象描述了XML文檔的等級狀態(tài),DOMDocument類是一個(gè)描繪XML文檔的DOM結(jié)構(gòu)的MSXML類。
DOMDocument類僅僅提供了很少的幾個(gè)有用的屬性和方法。Load方法載入一個(gè)xml文件,loadxml方法將字符串作為xml數(shù)據(jù)添加到對象中。例如,下面的代碼就將一個(gè)小的xml文件添加到名為xml_document的文檔中。
Dim xml_document As New DOMDocument
xml_document.loadXML _
"<Person>" vbCrLf _
" <FirstName>Rod</FirstName>" vbCrLf _
" <LastName>Stephens</LastName>" vbCrLf _
"</Person>"
DOMDocument的xml屬性返回文檔的xml描述,可以顯示這些返回值看看這些文檔究竟是什么樣子,也可以將它存儲為一個(gè)文件,但這完全不必要,因?yàn)镈OMDocument對象的save方法已經(jīng)自動將他們存儲了。
DOMDocument對象的documentElement屬性表示文檔數(shù)據(jù)的根結(jié)點(diǎn),通常情況下操作XML文檔都從這里開始。
DOMDocument提供了幾種創(chuàng)建新節(jié)點(diǎn)的方法。CreateElement方法為文檔創(chuàng)建一個(gè)新的元素節(jié)點(diǎn),其他創(chuàng)建節(jié)點(diǎn)的方法有createAttribute, createProcessingInstruction, 和 createTextNode,在這里就不一一介紹了。
IXMLDOMNode類
IXMLDOMNode類描述了一個(gè)節(jié)點(diǎn),該類提供了一系列用于搜索和操縱XML文檔的屬性和方法。
selectSingleNode 方法用于搜索指定節(jié)點(diǎn)的后代,用于搜索指定節(jié)點(diǎn)路徑的語言稱為XPATH,XPATH非常棘手,本文就不詳細(xì)說明其規(guī)范了。下面我們將介紹兩個(gè)對搜索子節(jié)點(diǎn)有特別有用并且簡單的方法。
在給selectsingleNode方法中輸入子節(jié)點(diǎn)的名字,該方法將在節(jié)點(diǎn)的子節(jié)點(diǎn)進(jìn)行精確匹配搜索。如果在輸入的字符串前面加上".//",那么將搜索節(jié)點(diǎn)的全部后代。
' Search for a child node named "LastName."
Set last_name_node = address_node.selectSingleNode("LastName")
' Search for any descendant named "LastName."
Set last_name_node = address_node.selectSingleNode(".//LastName")
下面列出了IXMLDOMNode對象的部分非常有用的屬性:
attributes.節(jié)點(diǎn)屬性集合
nodeName.節(jié)點(diǎn)的標(biāo)記名
nodeTypeString.節(jié)點(diǎn)的類型
ownerDocument.返回DOMDocument對象包含的節(jié)點(diǎn)
text.表示節(jié)點(diǎn)包含的文本內(nèi)容。如果該節(jié)點(diǎn)包含其他節(jié)點(diǎn),那么text代表了所有節(jié)點(diǎn)的文本內(nèi)容的組合。
xml.給出了節(jié)點(diǎn)的xml內(nèi)容,例如:"<FirstName>Rod</FirstName>".
ChildNodes集合包含了節(jié)點(diǎn)的子節(jié)點(diǎn)。要給節(jié)點(diǎn)增加一個(gè)子節(jié)點(diǎn),首先必須給使用DOMDocument對象的節(jié)點(diǎn)創(chuàng)建方法,然后將這個(gè)新建的節(jié)點(diǎn)加入到父節(jié)點(diǎn)的childNodes集合中。下面的代碼展示了創(chuàng)建一個(gè)新的子節(jié)點(diǎn)的子程序,并使用父節(jié)點(diǎn)的appendChild方法將其加入到父節(jié)點(diǎn)中:
' Add a new node to the indicated parent node.
Private Sub CreateNode(ByVal indent As Integer, _
ByVal parent As IXMLDOMNode, ByVal node_name As String, _
ByVal node_value As String)
Dim new_node As IXMLDOMNode
' Create the new node.
Set new_node = parent.ownerDocument.createElement(node_name)
' Set the node's text value.
new_node.Text = node_value
' Add the node to the parent.
parent.appendChild new_node
End Sub
SaveValues 程序
現(xiàn)在我們可以使用XML創(chuàng)建一個(gè)簡單的程序(如圖1),其值存儲到XML文件中,在程序開始運(yùn)行時(shí),程序從VALUE.XML文件中加載數(shù)據(jù),在程序運(yùn)行結(jié)束時(shí),將程序中的現(xiàn)行值存入VALUE.XML文件中。
下面的代碼是顯示了VALUE.XML文件的結(jié)構(gòu):
<Values>
<FirstName>Rod</FirstName>
<LastName>Stephens</LastName>
<Street>1234 Programmer Place</Street>
<City>Bugsville</City>
<State>CO</State>
<Zip>80276</Zip>
</Values>
List1顯示了怎樣編寫SaveValues,當(dāng)載入表單時(shí),form_load事件觸發(fā)LoadValues子程序。
LoadValues創(chuàng)建了一個(gè)名為xml_document的DOMDocument對象,然后載入xml文件,使用selectSingleNode方法查找名為values的節(jié)點(diǎn),然后使用GetNodeValue方法獲得從value節(jié)點(diǎn)后代中得到的值。
GetNodeValue使用value節(jié)點(diǎn)的selectSingleNode方法尋找目標(biāo)節(jié)點(diǎn),如果節(jié)點(diǎn)不存在函數(shù)將返回一個(gè)缺省值,如果找到這個(gè)節(jié)點(diǎn)GetNodeValue將返回該節(jié)點(diǎn)的text值。對于value.xml文件中的數(shù)據(jù)節(jié)點(diǎn),text僅僅是包含在節(jié)點(diǎn)中的文本內(nèi)容。
當(dāng)窗體卸載時(shí)觸發(fā)form_unload事件,unload事件調(diào)用SaveValues子程序。程序創(chuàng)建一個(gè)新的DOMDocument對象,該對象創(chuàng)建一個(gè)新的名為value的節(jié)點(diǎn),然后用文檔的appendChild方法將節(jié)點(diǎn)添加到文檔中。
在創(chuàng)建所有新的節(jié)點(diǎn)后,SaveValues調(diào)用DOMDocument's save方法存儲新的xml文件。
注意這個(gè)新的文件已經(jīng)覆蓋了舊文件,使用DOMDocument對象無法部分改變XML文件,可以加載XML文件,然后修改其中一部分,然后保存文件,但原文件將被完全覆蓋。這是一個(gè)小的缺陷,但在這時(shí)可以使用其它程序進(jìn)行修改。
List1的最后一部分是CreateNode子程序,CreateNode 為父節(jié)點(diǎn)創(chuàng)建一個(gè)新節(jié)點(diǎn)并同時(shí)給這個(gè)節(jié)點(diǎn)賦值。在這個(gè)子程序中首先引用一個(gè)DOMDocument對象,然后使用該對象的createElement方法創(chuàng)建一個(gè)新的節(jié)點(diǎn)。
createNode方法設(shè)置節(jié)點(diǎn)的text屬性,然后將節(jié)點(diǎn)作為子節(jié)點(diǎn)添加到父節(jié)點(diǎn)中。
List1:
Option Explicit
Private m_AppPath As String
Private Sub Form_Load()
' Get the application's startup path.
m_AppPath = App.Path
If Right$(m_AppPath, 1) <> "\" Then m_AppPath = m_AppPath "\"
' Load the values.
LoadValues
End Sub
Private Sub Form_Unload(Cancel As Integer)
' Save the current values.
SaveValues
End Sub
' Load saved values from XML.
Private Sub LoadValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode
' Load the document.
Set xml_document = New DOMDocument
xml_document.Load m_AppPath "Values.xml"
' If the file doesn't exist, then
' xml_document.documentElement is Nothing.
If xml_document.documentElement Is Nothing Then
' The file doesn't exist. Do nothing.
Exit Sub
End If
' Find the Values section.
Set values_node = xml_document.selectSingleNode("Values")
' Read the saved values.
txtFirstName.Text = GetNodeValue(values_node, "FirstName", "???")
txtLastName.Text = GetNodeValue(values_node, "LastName", "???")
txtStreet.Text = GetNodeValue(values_node, "Street", "???")
txtCity.Text = GetNodeValue(values_node, "City", "???")
txtState.Text = GetNodeValue(values_node, "State", "???")
txtZip.Text = GetNodeValue(values_node, "Zip", "???")
End Sub
' Return the node's value.
Private Function GetNodeValue(ByVal start_at_node As IXMLDOMNode, _
ByVal node_name As String, _
Optional ByVal default_value As String = "") As String
Dim value_node As IXMLDOMNode
Set value_node = start_at_node.selectSingleNode(".//" node_name)
If value_node Is Nothing Then
GetNodeValue = default_value
Else
GetNodeValue = value_node.Text
End If
End Function
' Save the current values.
Private Sub SaveValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode
' Create the XML document.
Set xml_document = New DOMDocument
' Create the Values section node.
Set values_node = xml_document.createElement("Values")
' Add the Values section node to the document.
xml_document.appendChild values_node
' Create nodes for the values inside the
' Values section node.
CreateNode values_node, "FirstName", txtFirstName.Text
CreateNode values_node, "LastName", txtLastName.Text
CreateNode values_node, "Street", txtStreet.Text
CreateNode values_node, "City", txtCity.Text
CreateNode values_node, "State", txtState.Text
CreateNode values_node, "Zip", txtZip.Text
' Save the XML document.
xml_document.save m_AppPath "Values.xml"
End Sub
' Add a new node to the indicated parent node.
Private Sub CreateNode(ByVal parent As IXMLDOMNode, _
ByVal node_name As String, ByVal node_value As String)
Dim new_node As IXMLDOMNode
' Create the new node.
Set new_node = parent.ownerDocument.createElement(node_name)
' Set the node's text value.
new_node.Text = node_value
' Add the node to the parent.
parent.appendChild new_node
End Sub
SaveValuesIndented 程序
雖然每個(gè)人都化了很大的精力去處理xml文檔,使他們看上更容易些,但xml工具一般都忽略了那些使xml文檔結(jié)構(gòu)明顯的空白和縮進(jìn),xml解析器也同樣忽略縮進(jìn)和空白。
不幸的是我們例子也同樣忽略了這些縮進(jìn)和空白,SaveValues創(chuàng)建了一個(gè)象下面那樣的xml文件,所有的代碼都在同一行中。
<Values><FirstName>Rod</FirstName><LastName>Stephens</LastNa
me><Street>1234 Programmer Place</Street><City>Bugsville</Ci
ty><State>CO</State><Zip>80276</Zip></Values>
VB.NET中包括了文本寫入類,可以XML文檔規(guī)定格式。但MSXML重沒有這種功能,所以如果需要以一種清晰的格式保存XML文件,只能另行添加它的格式。
List2列出了程序SaveValuesIndented使用的代碼,SaveValues子程序與上面例子中講的幾乎完全相同,但他在創(chuàng)建value節(jié)點(diǎn)后同時(shí)給XML文檔創(chuàng)建了一個(gè)<value>標(biāo)記的新行。
然后SaveValues 調(diào)用CreateNode創(chuàng)建一個(gè)新的數(shù)據(jù)節(jié)點(diǎn),但在這里它傳遞給CreateNode一個(gè)新的參數(shù),這個(gè)參數(shù)表示這個(gè)新節(jié)點(diǎn)的縮進(jìn)方式。
CreateNode
' Save the current values.
Private Sub SaveValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode
' Create the XML document.
Set xml_document = New DOMDocument
' Create the Values section node.
Set values_node = xml_document.createElement("Values")
' Add a new line.
values_node.appendChild xml_document.createTextNode(vbCrLf)
' Add the Values section node to the document.
xml_document.appendChild values_node
' Create nodes for the values inside the
' Values section node.
CreateNode 4, values_node, "FirstName", txtFirstName.Text
CreateNode 4, values_node, "LastName", txtLastName.Text
CreateNode 4, values_node, "Street", txtStreet.Text
CreateNode 4, values_node, "City", txtCity.Text
CreateNode 4, values_node, "State", txtState.Text
CreateNode 4, values_node, "Zip", txtZip.Text
' Save the XML document.
xml_document.save m_AppPath "Values.xml"
End Sub
' Add a new node to the indicated parent node.
Private Sub CreateNode(ByVal indent As Integer, _
ByVal parent As IXMLDOMNode, ByVal node_name As String, _
ByVal node_value As String)
Dim new_node As IXMLDOMNode
' Indent.
parent.appendChild parent.ownerDocument.createTextNode(Space$(indent))
' Create the new node.
Set new_node = parent.ownerDocument.createElement(node_name)
' Set the node's text value.
new_node.Text = node_value
' Add the node to the parent.
parent.appendChild new_node
' Add a new line.
parent.appendChild parent.ownerDocument.createTextNode(vbCrLf)
End Sub
結(jié)論
本文僅僅揭示XML編程的表面,本文的例子中的涉及只是非常簡單的XML文件,但你可以使用使用本文揭示的技術(shù)做更多的事情,比如配置設(shè)置、表單位置、以及其他信息。XML已經(jīng)向前更進(jìn)一步的發(fā)展了,有了更復(fù)雜的數(shù)據(jù)層次。對于更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在運(yùn)行時(shí)可以更容易的使用MSXML對象來存取XML文件
本文題目:關(guān)于vb.netxml語法的信息
文章地址:http://www.sd-ha.com/article32/dsihcpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、企業(yè)網(wǎng)站制作、商城網(wǎng)站、企業(yè)建站、域名注冊、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)