九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
<VB.net|xml>VB和VB.NET中的XML操作(詳細(xì)介紹)
擴(kuò)展標(biāo)記語言XML是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立。XML的簡(jiǎn)單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的唯一公共語言,可以說,“沒有XML,就沒有編程的未來”。

  XML主要應(yīng)用在以下幾個(gè)方面:

  1. 設(shè)計(jì)標(biāo)記語言,如CML,MathML, WML等。

  2. 數(shù)據(jù)交換和數(shù)據(jù)整合,這是XML最激動(dòng)人心的應(yīng)用。

  3. 媒體無關(guān)的數(shù)據(jù)發(fā)布

  4. 智能代理和本地計(jì)算

  5. 精確搜索

  6. 文件保值

  XML的語法非常的簡(jiǎn)單,XML文檔由節(jié)點(diǎn)組成,使用打開和關(guān)閉節(jié)點(diǎn)描述標(biāo)記,在格式上與HTML標(biāo)記非常相似,它們之間最大的不同是:XML中可以自由定義標(biāo)記名。比如下面的標(biāo)記就描述了一個(gè)主頁(yè)地址:

   <web>http://hongwanfu.126.com</web>

  注意,XML不用聲明標(biāo)記名就可以使用,而且,開始和結(jié)束標(biāo)記必須相同,XML是識(shí)別大小寫的,所以標(biāo)記的大小寫也必須相同。

  節(jié)點(diǎn)標(biāo)記中可以包含屬性,比如:

<web type=”Homepage”>http://hongwanfu.126.com</web>
  
  代碼中Web節(jié)點(diǎn)包含屬性Type,其值為Homepage.

  如果不愿意在節(jié)點(diǎn)中包含一個(gè)值,那么可以不需要結(jié)束標(biāo)記,可以用在開始標(biāo)記的后面加一個(gè)斜線來結(jié)束節(jié)點(diǎn),在下面的例子中,Web標(biāo)記的屬性就存儲(chǔ)了一個(gè)電話號(hào)碼,所以就不需要一個(gè)結(jié)束標(biāo)記:

<web type=”Homepage” url=”http://hongwanfu.126.com” />
 
  以上只是對(duì)XML文檔的簡(jiǎn)單描述,如何使用文檔中包含的信息,XML標(biāo)準(zhǔn)體系中有其他的配套標(biāo)準(zhǔn)。
  XSL(可擴(kuò)展樣式表語言)是對(duì)CSS的一種擴(kuò)展,功能比CSS強(qiáng)大得多。 XML鏈接是在HTML鏈接的功能之上加以擴(kuò)展,可以支持更為復(fù)雜的鏈接,通過XML鏈接,不僅可以在XML文件之間建立鏈接,還可以建立其他類型數(shù)據(jù)之間的鏈接,其規(guī)范分為三個(gè)部分:XLink語言,XPointer語言和XML Base.

  XML標(biāo)準(zhǔn)體系中還有其他很多技術(shù),比如針對(duì)DTD的不足而提出的XML Schema,對(duì)XML文檔進(jìn)行結(jié)構(gòu)話處理的DOM等,由于篇幅的關(guān)系,在這就不一一列舉,不熟悉的請(qǐng)參考有關(guān)書籍。

  好了,現(xiàn)在讓我們開始進(jìn)入正題——對(duì)XML的操作。首先,請(qǐng)保證您的電腦中有最新版本的MSXML,微軟XML核心服務(wù)(MSXML)版本4.0提供了從Visual Basic6.0加載和存儲(chǔ)XML文檔的工具。若沒有,請(qǐng)到http://msdn.microsoft.com/xml/default.asp中下載最新版本的MSXML,并安裝在計(jì)算機(jī)上。在Visual Basic 6.0中使用Microsoft XML V4.0對(duì)象引用其他對(duì)象一樣,首先在工程菜單中選擇引用菜單項(xiàng),選擇Microsoft V4.0,單擊OK,一切完成后就現(xiàn)在就可以在VB應(yīng)用程序中添加XML對(duì)象了。如圖:



  萬事俱備,我們先用VB和MSXML的COM接口的DOM實(shí)現(xiàn)的一個(gè)例子來對(duì)XML操作進(jìn)行初步的了解吧。

  首先聲明下面要用的幾個(gè)對(duì)象的變量:

Dim tempdoc As DOMDocument
Dim tempnode As IXMLDOMNode
Dim tempelement As IXMLDOMElement
Dim tempattribute As IXMLDOMElement
Dim root As IXMLDOMElement

  文檔對(duì)象模型(DOM)使用了一系列相應(yīng)的對(duì)象描述了XML文檔的等級(jí)狀態(tài),DOMDocument類是一個(gè)描繪XML文檔的DOM結(jié)構(gòu)的MSXML類。DOMDocument類僅僅提供了很少的幾個(gè)有用的屬性和方法,例如:Load方法載入一個(gè)xml文件,loadxml方法將字符串作為xml數(shù)據(jù)添加到對(duì)象中。DOMDocument的xml屬性返回文檔的xml描述,可以顯示這些返回值看看這些文檔究竟是什么樣子,也可以將它存儲(chǔ)為一個(gè)文件,DOMDocument對(duì)象的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類描述了一個(gè)節(jié)點(diǎn),該類提供了一系列用于搜索和操縱XML文檔的屬性和方法。selectSingleNode 方法用于搜索指定節(jié)點(diǎn)的后代,用于搜索指定節(jié)點(diǎn)路徑的語言稱為XPATH,XPATH非常棘手,本文就不詳細(xì)說明其規(guī)范了。在IXMLDOMNode對(duì)象中,有許多有用的屬性值:

  attributes.節(jié)點(diǎn)屬性集合
  nodeName.節(jié)點(diǎn)的標(biāo)記名
  nodeTypeString.節(jié)點(diǎn)的類型
  ownerDocument.返回DOMDocument對(duì)象包含的節(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)容,例如:"<Email>hongwanfu@yahoo.com</Email>".

  ChildNodes集合包含了節(jié)點(diǎn)的子節(jié)點(diǎn)。要給節(jié)點(diǎn)增加一個(gè)子節(jié)點(diǎn),首先必須給使用DOMDocument對(duì)象的節(jié)點(diǎn)創(chuàng)建方法,然后將這個(gè)新建的節(jié)點(diǎn)加入到父節(jié)點(diǎn)的childNodes集合中。 ChildNodes集合包含了節(jié)點(diǎn)的子節(jié)點(diǎn)。要給節(jié)點(diǎn)增加一個(gè)子節(jié)點(diǎn),首先必須給使用DOMDocument對(duì)象的節(jié)點(diǎn)創(chuàng)建方法,然后將這個(gè)新建的節(jié)點(diǎn)加入到父節(jié)點(diǎn)的childNodes集合中。

  由于每個(gè)節(jié)點(diǎn)類型都有不同的訪問方法和內(nèi)容限制,有時(shí)候使用特定類型的節(jié)點(diǎn)要比使用通用 IXMLDOMNode 對(duì)象更容易。要做到這一點(diǎn),需要使用 IXMLDOMElement 對(duì)象來處理 XML 數(shù)據(jù)元素和屬性。正如元素可以包含 XML 數(shù)據(jù)文件中的子元素、文本、注釋、處理說明、CDATA 部分和實(shí)體引用一樣,IXMLDOMElement 對(duì)象也可以包含 IXMLDOMElement、IXMLDOMText、IXMLDOMComment、IXMLDOMProcessingInstruction、IXMLDOMCDATASection 和 IXMLDOMEntityReference 對(duì)象??梢酝ㄟ^使用 IXMLDOMElement 對(duì)象的 getAttribute 和 setAttribute 方法來訪問屬性;或者通過 IXMLDOMElement 對(duì)象的 attributes 屬性,將屬性作為 IXMLDOMNamedNodeMap 對(duì)象進(jìn)行管理。有關(guān)使用這些方法和對(duì)象的詳細(xì)信息,請(qǐng)參閱 MSXML 4.0 SDK Help。

  接下來我們要做的是生成一個(gè)XML DOMDocument 對(duì)象 :

Set tempdoc = New DOMDocument

  生成根節(jié)點(diǎn)并把它設(shè)置為文件的根 :

Set root = tempdoc.createElement("Personal")
Set tempdoc.documentElement = root

  生成孩子節(jié)點(diǎn)添加到根節(jié)點(diǎn)上去,并且為這個(gè)節(jié)點(diǎn)設(shè)置一個(gè)屬性 :
  
Set tempnode = tempdoc.createNode(NODE_ELEMENT, "Web", "")
tempnode.Text = " http://hongwanfu.126.com "
root.appendChild tempnode

  取得元素節(jié)點(diǎn)的接口,添加屬性:

Set tempelement = tempnode
tempelement.setAttribute "Type", "Homepage"

  最后,寫XML文件:

Open "CreateXMLFile.xml" for output as #1
Print #1, root.XML
Close #1

  下面就是上面程序生成的CreateXMLFile.xml文件的內(nèi)容如圖:


  熟悉了如何用Visual Basic 6創(chuàng)建XML文件,接下來,我們將編寫一個(gè)程序,使得程序開始運(yùn)行時(shí),程序從XML文件中加載數(shù)據(jù),在程序運(yùn)行結(jié)束時(shí),將程序中的現(xiàn)行值存入XML文件中。

  首先,建立一個(gè)名叫Personal.xml的文件:

<?xml version="1.0" encoding="GB2312"?>

<個(gè)人信息>

<姓名>洪萬福</姓名>

<性別>男</性別>

<出生日期>1983年x月x日</出生日期>

<地址>福建省廈門市集美大學(xué)水產(chǎn)學(xué)院新區(qū)270#</地址>

<郵編>361021</郵編>

<QQ>24948251</QQ>

<個(gè)人主頁(yè)>http://hongwanfu.126.com</個(gè)人主頁(yè)>

</個(gè)人信息>

  其中,encoding="GB2312"是為了防止顯示中文時(shí)出現(xiàn)亂碼。

  接著,進(jìn)入Visual Basic 6,建立7個(gè)Label和7個(gè)TextBox, 具體如圖:



  隨后,編寫如下代碼:

Option Explicit
Private p_AppPath As String
Private Sub Form_Load()
 ' 獲得程序運(yùn)行目錄
 p_AppPath = App.Path
 If Right$(p_AppPath, 1) <> "\" Then p_AppPath = p_AppPath & "\"
 ' 加載值
 LoadValues
End Sub

Private Sub Form_Unload(Cancel As Integer)
 ' 保存現(xiàn)有的值
 SaveValues
End Sub

Private Sub LoadValues()

 Dim xml_document As DOMDocument

 Dim values_node As IXMLDOMNode

 ' 載入文件

 Set xml_document = New DOMDocument
 xml_document.Load p_AppPath & "Personal.xml"
 If xml_document.documentElement Is Nothing Then

  Exit Sub

 End If

 '尋找節(jié)點(diǎn)
 Set values_node = xml_document.selectSingleNode("個(gè)人信息")
 ' 讀取各個(gè)節(jié)點(diǎn)的值
 txtName.Text = GetNodeValue(values_node, "姓名", "???")
 txtSex.Text = GetNodeValue(values_node, "性別", "???")
 txtBirthday.Text = GetNodeValue(values_node, "出生日期", "???")
 txtAddress.Text = GetNodeValue(values_node, "地址", "???")
 txtZip.Text = GetNodeValue(values_node, "郵編", "???")
 txtQQ.Text = GetNodeValue(values_node, "QQ", "???")
 txtHomepage.Text = GetNodeValue(values_node, "個(gè)人主頁(yè)", "???")

End Sub

' 返回各個(gè)節(jié)點(diǎn)的值

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

' 保存現(xiàn)有的值

Private Sub SaveValues()
 Dim xml_document As DOMDocument
 Dim values_node As IXMLDOMNode
 ' 建立XML文件
 Set xml_document = New DOMDocument
 Set values_node = xml_document.createElement("個(gè)人信息")
 xml_document.appendChild values_node
 CreateNode values_node, "姓名", txtName.Text
 CreateNode values_node, "性別", txtSex.Text
 CreateNode values_node, "出生日期", txtBirthday.Text
 CreateNode values_node, "地址", txtAddress.Text
 CreateNode values_node, "郵編", txtZip.Text
 CreateNode values_node, "QQ", txtQQ.Text
 CreateNode values_node, "個(gè)人主頁(yè)", txtHomepage.Text
 ' 保存XML文件
 xml_document.save p_AppPath & "Personal.xml"
 
End Sub

Private Sub CreateNode(ByVal parent As IXMLDOMNode, _

ByVal node_name As String, ByVal node_value As String)

 Dim new_node As IXMLDOMNode
 Set new_node = parent.ownerDocument.createElement(node_name)
 new_node.Text = node_value
 parent.appendChild new_node
End Sub

  運(yùn)行結(jié)果如下:



  雖然,MSXML提供了從Visual Basic6.0加載和存儲(chǔ)XML文檔的工具,但是,對(duì)其的應(yīng)用要求程序員對(duì)VB和MSXML的COM接口有一定的認(rèn)識(shí),所以,并不是得到很廣泛的應(yīng)用。
  Visual Basic.NET的出現(xiàn)大大改變了這個(gè)狀況,Visual Basic.NET提供了使用XML、XSL以及其他XML工具的完整工具,使用戶很輕松就能實(shí)現(xiàn)XML的應(yīng)用,甚至,在不用編寫代碼的情況下操作XML。

  ADO.NET是Microsoft新推出的.NET框架中用于數(shù)據(jù)訪問的組件,其最大的優(yōu)點(diǎn)就是使用XML作為傳送數(shù)據(jù)的標(biāo)準(zhǔn),只要有一個(gè)XML文本,就可以讀入ADO.NET的組件中,然后ADO.NET再以XML格式傳給數(shù)據(jù)庫(kù)或者其他組件。

  可以使用DataSet對(duì)象的ReadXML方法將一個(gè)XML文件讀入到DataSet中,這是一個(gè)重載的方法,有幾種語法格式,經(jīng)常用到的如下所示:

ReadXML(FileName)

  其中,F(xiàn)ileName為XML文檔的名字,現(xiàn)在將前面創(chuàng)建的XML文本“Personal.xml”讀入到DataSet中。新建一個(gè)項(xiàng)目,在窗體上創(chuàng)建一個(gè)Button和一個(gè)DataGrid控件,雙擊Button1輸入以下代碼:

Dim ds As New DataSet()

'讀入XML文檔
ds.ReadXml("personal.xml")
Dim tb As DataTable
Dim dv As DataView
tb = ds.Tables(0)
dv = New DataView(tb)
Me.DataGrid1.DataSource = dv

  顯示結(jié)果如圖:



  怎么樣?和剛才比起來,代碼量是不是少了很多,很容易就實(shí)現(xiàn)了XML文件的讀取呢?

  .NET框架提供了操作XML文檔和數(shù)據(jù)的一組完整的類。XmlReader和XmlWriter對(duì)象以及這兩個(gè)對(duì)象的派生類提供了讀取XML和可選驗(yàn)證XML的能力。XmlDocument和XMLSchema對(duì)象及其相關(guān)類代表了XML本身,而XslTransform和XMPathNavigator類分別支持XSL轉(zhuǎn)換(XSLT)和應(yīng)XML路徑語言(XPath)查詢。

  除了提供操作XML數(shù)據(jù)的外,XML標(biāo)準(zhǔn)還是.NET框 架中數(shù)據(jù)轉(zhuǎn)換和序列化的基礎(chǔ)。多數(shù)時(shí)候這些后臺(tái)進(jìn)行,不過我們已經(jīng)看到ADO.NET類型化數(shù)據(jù)集是使用XML架構(gòu)表示的。

  另外,ADO.NET數(shù)據(jù)集類對(duì)讀寫XML數(shù)據(jù)和架構(gòu)提供直接支持,而且XmlDataDocument提供同步XML數(shù)據(jù)和關(guān)系A(chǔ)DO.NET數(shù)據(jù)集的能力,這樣就可以用XML和關(guān)系工具對(duì)數(shù)據(jù)的單個(gè)集合進(jìn)行操作。

  .NET框架公開了一個(gè)可用來直接對(duì)XML數(shù)據(jù)進(jìn)行操作的類集。不過,如果需要使用關(guān)系操作(如排序、過濾或檢索相關(guān)行),數(shù)據(jù)集則提供了一個(gè)更簡(jiǎn)便的機(jī)制。此外,XML類不支持?jǐn)?shù)據(jù)綁定,所以如果要向用戶顯示數(shù)據(jù),就必須使用數(shù)據(jù)集的XML方法。

  幸運(yùn)的是,將任何一個(gè)給定的數(shù)據(jù)集合作為XML層次結(jié)構(gòu)或關(guān)系數(shù)據(jù)集相互并不排斥。

  1.數(shù)據(jù)集支持的最直接的XML方法可能就是GetXml和GetXmlSchema了,這方法只將XML數(shù)據(jù)或XSD架構(gòu)作為一個(gè)字符串值返回。可以用以下代碼來實(shí)現(xiàn):

Dim xmlstr As String
xmlStr = Me.dsMasterl.GetXmlSchema()
Me.tbResult.Text = xmlStr

  和

Dim xmlstr As String
xmlStr = Me.dsMasterl.GetXml
Me.tbResult.Text = xmlStr

  2. 數(shù)據(jù)集的ReadXmlSchema方法可從XSD架構(gòu)定義或從XML加載數(shù)據(jù)集架構(gòu)定義。

  ReadXmlSchema支持4個(gè)版本的方法??梢詫⒘?、識(shí)別文件名的字符串、TextReader或XmlReader對(duì)象傳遞給方法。

  ReadXmlSchema不加載任何數(shù)據(jù),它只加載表、列和約束(鍵和關(guān)系)。如果數(shù)據(jù)集已經(jīng)架構(gòu)信息,新表、列和約束將在必要時(shí)添加到現(xiàn)有架構(gòu)中。如果正讀取的架構(gòu)中定義的對(duì)象與現(xiàn)有數(shù)據(jù)集架構(gòu)沖突,那么ReadXmlSchema方法將會(huì)引發(fā)一個(gè)異常。

Dim newDS As New System.Data.DataSet()
newDS.ReadXmlSchema("masterSchema.xsd")
Me.daCategories.Fill(newDS.Tables("Categories"))
Me.daproducts.Fill(newDS.Tables("Products"))
SetBindings(newDS)

  3. 數(shù)據(jù)集的InferXmlSchema方法根據(jù)傳遞給它的XML數(shù)據(jù)的結(jié)構(gòu)派生出數(shù)據(jù)集架構(gòu)。

  InferXmlSchema與上一節(jié)介紹的ReadXmlSchema方法的輸入源相同。另外,InferXMLSchema方法接受表示命名空間的字符串?dāng)?shù)組,這個(gè)空間在生成數(shù)據(jù)集架構(gòu)時(shí)應(yīng)被忽略。

Dim newDS As New System.Data.DataSet()
Dim nsStr()As string
newDS.InferXmlSchema("dataOnly.xml",nsStr))
Me.daCategories.Fill(newDS.Tables("Categories"))
Me.daProducts.Fill(newDS.Tables(Products"))
newDS.Relations.Add("CategoriesProducts", _
newDS.Tables("Categories").Columns("CategoryID"), _
newDS.Tables("Products").Columns("CategoryID"))

  前兩行代碼聲明了數(shù)據(jù)集和String數(shù)組變量,第3行將結(jié)果傳遞到InferXmlSchema方法中。接下來的代碼給新數(shù)據(jù)集添加并填充了新的數(shù)據(jù)關(guān)系,然后SetBindings函數(shù)將XML窗體控件綁定到數(shù)據(jù)集上。

  4.WriteXmlSchema方法將數(shù)據(jù)集架構(gòu)(包括表、列和約束)寫到指定輸出中。這個(gè)方法和其他XML方法一樣,都接受相同的輸出參數(shù)。

Me.dsMaster1.WriteXmlSchema("testSchema.xsd")
Messagebox.Show("Finished","WriteXmlSchema")

  5. 與ReadXml類似,數(shù)據(jù)集的WriteXml方法也可將XML數(shù)據(jù)或可選的數(shù)據(jù)集架構(gòu)信息寫到指定輸出中。

Me.daCategories.Fill(Me.dsMaster1.Categories)
Me.daProducts.Fill(Me.dsMaster1.Products)
Me.dsMaster1.WriteXml("newData.xml", XmlWriteMode.IgnoreSchema)
MessageBox.Show("Finished", “WriteXml")

  默認(rèn)情況下,WriteXml方法生成XML,所生成的XML是一般結(jié)構(gòu)來設(shè)置格式的,其中數(shù)據(jù)表的結(jié)構(gòu)作為復(fù)雜類型,數(shù)據(jù)列的結(jié)構(gòu)作為復(fù)雜類型中的元素。這并不一定是所需要的輸出結(jié)果。例如,如果要將數(shù)據(jù)讀回到數(shù)據(jù)集,只有存在架構(gòu)時(shí)(而架構(gòu)在很多情況下都是不很必要的開銷)或者相關(guān)數(shù)據(jù)嵌套在XML層次結(jié)構(gòu)中時(shí),ADO.NET才會(huì)創(chuàng)建正確的關(guān)系。在其他情況下,也許需要控制列是否以元素、必性或簡(jiǎn)單文本方式寫入,或者完全阻止某些列被寫入。比如,在應(yīng)用程序間互換數(shù)據(jù)就可能出會(huì)這種情況。

Me.daCategories.Fill(Me.dsMaster1.Categories)
Me.daProducts.Fill(Me.dsMaster1.Products)
Me.dsMaster1.Relations("CategoriesProducts").Nested = True
Me.dsMaster1.WriteXml("nestedData.xml",XmlWriteMode.IgnoreSchema)
MessageBox.Show("Finished","WriteXml Nested")

  數(shù)據(jù)列的ColumnMapping(列映射)屬性控制著WriteXML方法寫入列的方式。ColumnMapping屬性的可能取值。 默認(rèn)值Element將列作為表示數(shù)據(jù)表的復(fù)雜類型內(nèi)的嵌套元素寫入,同時(shí),Attribute將列作為它的必性之一寫入。這兩個(gè)值可以在任何給定的數(shù)據(jù)表內(nèi)混用。Hidden值可防止列寫入。SimpleContent將列作為一個(gè)簡(jiǎn)單文本值寫入,它不能與那些作為元素或?qū)傩詫懭氲牧谢旌希膊荒茉跀?shù)據(jù)關(guān)系的Nested屬性引用一個(gè)將Nested屬性設(shè)置為True的表時(shí)使用。

Me.daCategories.Fill(Me.dsMaster1.Categories)
with Me.dsMaster1.Categories
.Columns("CategoryID").ColumnMapping = MappingType.Attribute
.Columns("CategoryName").ColumnMapping = MappingType.Attribute
.Columns("dESCRIPTION").ColumnMapping = MappingType.Attribute
End with
Me.dsMaster1.WriteXml("attributes.xml", XmlWriteMode.IgnoreSchme)
MessageBox.Show("Finished", "Write Attributes")

  6. 雖然關(guān)系數(shù)據(jù)有效,但有些時(shí)候使用XML提供的工具(如XSL(可擴(kuò)展樣式表語言)、XSLT、和XPath)操作一組數(shù)據(jù)會(huì)更方便。

  .NET框架的Xml數(shù)據(jù)文檔(XML DataDocument)使之成為可能。Xml數(shù)據(jù)文檔允許將XML結(jié)構(gòu)的數(shù)據(jù)作為數(shù)據(jù)集來操作。它不會(huì)創(chuàng)建一組新數(shù)據(jù),但會(huì)創(chuàng)建一個(gè)引用所有或部分XML數(shù)據(jù)的數(shù)據(jù)集。因?yàn)橹挥幸唤M數(shù)據(jù),在一個(gè)視圖中所作的更改將會(huì)自動(dòng)反映在另一個(gè)視圖中。當(dāng)然存儲(chǔ)資源會(huì)被保存,因?yàn)橹痪S護(hù)了數(shù)據(jù)的一個(gè)副本。

  根據(jù)數(shù)據(jù)的初始源的不同,可以基于數(shù)據(jù)集的架構(gòu)和內(nèi)容創(chuàng)建一個(gè)Xml數(shù)據(jù)文檔,或基于Xml數(shù)據(jù)文檔的內(nèi)容創(chuàng)建數(shù)據(jù)集。在任何一種情況下,對(duì)一個(gè)視圖中存數(shù)據(jù)所作的更改將會(huì)映射到另一個(gè)視圖中。

  要?jiǎng)?chuàng)建基于現(xiàn)有數(shù)據(jù)集的Xml數(shù)據(jù)文檔,可將數(shù)據(jù)集傳遞給XMLDataDocument構(gòu)造函數(shù):

myXDD = New XmlDataDocument(myDS)

  如果在創(chuàng)建Xml數(shù)據(jù)文檔之前,數(shù)據(jù)集架構(gòu)還未建立,那就必須手動(dòng)建立這兩個(gè)架構(gòu),因?yàn)閷?duì)一個(gè)對(duì)象所作的架構(gòu)更改不會(huì)被傳播給另一個(gè)對(duì)象。反之,若要從XML文檔開始并創(chuàng)建數(shù)據(jù)集,可以使用默認(rèn)的XMLDataDocument構(gòu)造函數(shù),然后引用其數(shù)據(jù)集屬性。

myXdd = New XmlDataDocument()
myDS = myXDD.DataSet

  如果使用這個(gè)方法,就必須通過將對(duì)象添加到數(shù)據(jù)集的表數(shù)據(jù)表的列集合來手動(dòng)創(chuàng)建數(shù)據(jù)集架構(gòu)。為了能通過數(shù)據(jù)集使用Xml數(shù)據(jù)文檔的數(shù)據(jù),數(shù)據(jù)表和數(shù)據(jù)列的名稱必須與Xml數(shù)據(jù)文檔中的名稱相匹配,名稱匹區(qū)分大小寫的。

  第二種方法需要的代碼稍微多一些,提供了一個(gè)創(chuàng)建XML數(shù)據(jù)部分關(guān)系視圖的機(jī)制。在數(shù)據(jù)集中復(fù)制整個(gè)XML架構(gòu)沒有特殊要求。在數(shù)據(jù)集操作期間,所有不在數(shù)據(jù)集中的數(shù)據(jù)表和數(shù)據(jù)列都會(huì)被忽略。

  任何時(shí)候,同步前或同步后,都可將數(shù)據(jù)加載入兩個(gè)文檔中。對(duì)一個(gè)對(duì)象所作的數(shù)據(jù)更改(包括添加、刪除或更改值)都會(huì)被自動(dòng)映射到另一對(duì)象中。

Dim mySDD As System.Xml.XmlDataDocument
myXDD = New System.Xml.XmlDataDocument(Me.dsMaster1)
myXDD.Load ("dataOnly.xml")
SetBindings(Me.dsMaster1)

  .NET框架對(duì)XML操作提供廣泛支持,在System.XML名字空間中可以找到超過150個(gè)類,限于本人水平有限,只研究了XML和ADO.NET數(shù)據(jù)集之間的接口。

  總之,無論你喜歡與否,.NET框架都有一個(gè)令人難以拒絕的地方:這是個(gè)嶄新的平臺(tái)。在學(xué)習(xí)的過程中都要投如較多的精力。從現(xiàn)在開始,我們都是初學(xué)者,所以,請(qǐng)大家多多指點(diǎn)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
利用VB操作XML數(shù)據(jù)
VB6.0設(shè)計(jì)真正實(shí)用的TreeView控件
XML DOM介紹
VB和VB.NET中的XML操作(2)
VB和VB.NET中的XML操作
PHP:XML操作(后天堂
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服