萬事俱備,我們先用VB和MSXML的COM接口的DOM實現(xiàn)的一個例子來對XML操作進行初步的了解吧。首先聲明下面要用的幾個對象的變量:Dim tempdoc As DOMDocument
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計制作、做網(wǎng)站、古城網(wǎng)絡(luò)推廣、小程序設(shè)計、古城網(wǎng)絡(luò)營銷、古城企業(yè)策劃、古城品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供古城建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:m.rwnh.cn
Dim tempnode As IXMLDOMNode
Dim tempelement As IXMLDOMElement
Dim tempattribute As IXMLDOMElement
Dim root As IXMLDOMElement文檔對象模型(DOM)使用了一系列相應(yīng)的對象描述了XML文檔的等級狀態(tài),DOMDocument類是一個描繪XML文檔的DOM結(jié)構(gòu)的MSXML類。DOMDocument類僅僅提供了很少的幾個有用的屬性和方法,例如:Load方法載入一個xml文件,loadxml方法將字符串作為xml數(shù)據(jù)添加到對象中。DOMDocument的xml屬性返回文檔的xml描述,可以顯示這些返回值看看這些文檔究竟是什么樣子,也可以將它存儲為一個文件,DOMDocument對象的documentElement屬性表示文檔數(shù)據(jù)的根結(jié)點,通常情況下操作XML文檔都從這里開始。DOMDocument提供了幾種創(chuàng)建新節(jié)點的方法。CreateElement方法為文檔創(chuàng)建一個新的元素節(jié)點,其他創(chuàng)建節(jié)點的方法有createAttribute, createProcessingInstruction, 和 createTextNode,在這里就不一一介紹了。IXMLDOMNode類描述了一個節(jié)點,該類提供了一系列用于搜索和操縱XML文檔的屬性和方法。selectSingleNode 方法用于搜索指定節(jié)點的后代,用于搜索指定節(jié)點路徑的語言稱為XPATH,XPATH非常棘手,本文就不詳細說明其規(guī)范了。在IXMLDOMNode對象中,有許多有用的屬性值:attributes.節(jié)點屬性集合
nodeName.節(jié)點的標(biāo)記名
nodeTypeString.節(jié)點的類型
ownerDocument.返回DOMDocument對象包含的節(jié)點
text.表示節(jié)點包含的文本內(nèi)容。如果該節(jié)點包含其他節(jié)點,那么text代表了所有節(jié)點的文本內(nèi)容的組合。
xml.給出了節(jié)點的xml內(nèi)容,例如:"<Email>hongwanfu@yahoo.com</Email>".ChildNodes集合包含了節(jié)點的子節(jié)點。要給節(jié)點增加一個子節(jié)點,首先必須給使用DOMDocument對象的節(jié)點創(chuàng)建方法,然后將這個新建的節(jié)點加入到父節(jié)點的childNodes集合中。 ChildNodes集合包含了節(jié)點的子節(jié)點。要給節(jié)點增加一個子節(jié)點,首先必須給使用DOMDocument對象的節(jié)點創(chuàng)建方法,然后將這個新建的節(jié)點加入到父節(jié)點的childNodes集合中。由于每個節(jié)點類型都有不同的訪問方法和內(nèi)容限制,有時候使用特定類型的節(jié)點要比使用通用 IXMLDOMNode 對象更容易。要做到這一點,需要使用 IXMLDOMElement 對象來處理 XML 數(shù)據(jù)元素和屬性。正如元素可以包含 XML 數(shù)據(jù)文件中的子元素、文本、注釋、處理說明、CDATA 部分和實體引用一樣,IXMLDOMElement 對象也可以包含 IXMLDOMElement、IXMLDOMText、IXMLDOMComment、IXMLDOMProcessingInstruction、IXMLDOMCDATASection 和 IXMLDOMEntityReference 對象??梢酝ㄟ^使用 IXMLDOMElement 對象的 getAttribute 和 setAttribute 方法來訪問屬性;或者通過 IXMLDOMElement 對象的 attributes 屬性,將屬性作為 IXMLDOMNamedNodeMap 對象進行管理。有關(guān)使用這些方法和對象的詳細信息,請參閱 MSXML 4.0 SDK Help。接下來我們要做的是生成一個XML DOMDocument 對象 :Set tempdoc = New DOMDocument生成根節(jié)點并把它設(shè)置為文件的根 :Set root = tempdoc.createElement("Personal")
Set tempdoc.documentElement = root生成孩子節(jié)點添加到根節(jié)點上去,并且為這個節(jié)點設(shè)置一個屬性 :
Set tempnode = tempdoc.createNode(NODE_ELEMENT, "Web", "")
tempnode.Text = " "
root.appendChild tempnode取得元素節(jié)點的接口,添加屬性: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)容如圖:首先,建立一個名叫Personal.xml的文件:<?xml version="1.0" encoding="GB2312"?><個人信息><姓名>洪萬福</姓名><性別>男</性別><出生日期>1983年x月x日</出生日期><地址>福建省廈門市集美大學(xué)水產(chǎn)學(xué)院新區(qū)270#</地址><郵編>361021</郵編><QQ>24948251</QQ><個人主頁> </個人主頁></個人信息>其中,encoding="GB2312"是為了防止顯示中文時出現(xiàn)亂碼。接著,進入Visual Basic 6,建立7個Label和7個TextBox, 具體如圖: 隨后,編寫如下代碼:Option Explicit
Private p_AppPath As String
Private Sub Form_Load()
' 獲得程序運行目錄
p_AppPath = App.Path
If Right$(p_AppPath, 1) <> "\" Then p_AppPath = p_AppPath "\"
' 加載值
LoadValues
End SubPrivate Sub Form_Unload(Cancel As Integer)
' 保存現(xiàn)有的值
SaveValues
End SubPrivate 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 ThenExit Sub End If '尋找節(jié)點
Set values_node = xml_document.selectSingleNode("個人信息")
' 讀取各個節(jié)點的值
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, "個人主頁", "???")End Sub' 返回各個節(jié)點的值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 IfEnd 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("個人信息")
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, "個人主頁", txtHomepage.Text
' 保存XML文件
xml_document.save p_AppPath "Personal.xml"
End SubPrivate 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運行結(jié)果如下: 雖然,MSXML提供了從Visual Basic6.0加載和存儲XML文檔的工具,但是,對其的應(yīng)用要求程序員對VB和MSXML的COM接口有一定的認識,所以,并不是得到很廣泛的應(yīng)用。
作者:洪萬福出處:微軟社區(qū)責(zé)任編輯: 方舟 [ 2003-08-20 10:45 ] 本文為計劃將應(yīng)用程序更新到VB.NET的VB開發(fā)用戶提供一些關(guān)于XML的建議 Visual Basic.NET的出現(xiàn)大大改變了這個狀況,Visual Basic.NET提供了使用XML、XSL以及其他XML工具的完整工具,使用戶很輕松就能實現(xiàn)XML的應(yīng)用,甚至,在不用編寫代碼的情況下操作XML。ADO.NET是Microsoft新推出的.NET框架中用于數(shù)據(jù)訪問的組件,其最大的優(yōu)點就是使用XML作為傳送數(shù)據(jù)的標(biāo)準(zhǔn),只要有一個XML文本,就可以讀入ADO.NET的組件中,然后ADO.NET再以XML格式傳給數(shù)據(jù)庫或者其他組件??梢允褂肈ataSet對象的ReadXML方法將一個XML文件讀入到DataSet中,這是一個重載的方法,有幾種語法格式,經(jīng)常用到的如下所示:ReadXML(FileName)其中,F(xiàn)ileName為XML文檔的名字,現(xiàn)在將前面創(chuàng)建的XML文本“Personal.xml”讀入到DataSet中。新建一個項目,在窗體上創(chuàng)建一個Button和一個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
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é)點,/:表示根結(jié)點
For?Each?s?As?Xml.XmlNode?In?Items
Console.WriteLine(s.Attributes.GetNamedItem("id").Value??vbTab??s.InnerText)
Next
VB.net xpathnavigator 查詢特定節(jié)點
;hl=zh-CNnewwindow=1q=VB.net+xpathnavigator+%E6%9F%A5%E8%AF%A2%E7%89%B9%E5%AE%9A%E8%8A%82%E7%82%B9btnG=Google+%E6%90%9C%E7%B4%A2meta=lr%3Dlang_zh-CNaq=f
1. XML 首先,你要了解XML。我不是說僅僅是XML規(guī)格本身,還包括一系列相關(guān)的基于XML的語言:最重要的是XHTML、XSLT、XSL、DTDs、XML Schema (XSD)、XPath、XQuery和SOAP。那些在過去5年內(nèi)從未碰過鍵盤的人,可能不知道XML為何物。XML是一種文本文件,使用與HTML類似的標(biāo)記。XML能定義一個樹狀結(jié)構(gòu),并能描述所含的數(shù)據(jù)。 XML最好的一點是既能存結(jié)構(gòu)化數(shù)據(jù)也能存非結(jié)構(gòu)化數(shù)據(jù)。它既能存貯和描述“規(guī)格的”(regular)表格數(shù)據(jù),也能容納和描述“粗糙的”(ragged)文件數(shù)據(jù)。 XHTML是現(xiàn)今寫HTML的首選方法。因為它是形式完好(well formed)的XML,比起古老的、通常是畸形(malformed)的HTML文件,XHTML格式的文件更容易處理。 XSLT和XSL是用于把XML文件轉(zhuǎn)成其它格式的語言??赊D(zhuǎn)換的格式包括:文本文件、PDF文件、HTML、以逗號為分隔符的文件,或其它XML文件。 DTD和XML Schema描述XML文件所能包含的內(nèi)容的類型,并讓你“驗證”XML文件內(nèi)容的合理性,而不用寫特殊代碼以確保內(nèi)容符合規(guī)則要求。 XPath和XQuery是用于從XML文件中抽取單個項目或一組項目的查詢語言。XQuery擴展了XPath,因而更重要。XQuery與XML的關(guān)系正像SQL與關(guān)系數(shù)據(jù)庫的關(guān)系。 SOAP是Web服務(wù)之間的一個標(biāo)準(zhǔn)通訊協(xié)議。盡管你不需要對SOAP標(biāo)準(zhǔn)一清二楚,你應(yīng)該熟悉一般的schema和它的工作原理,以便能應(yīng)用這門技術(shù)。 2. Web服務(wù) Web服務(wù)是XML流行后的一個直接產(chǎn)物。因為你能用XML描述數(shù)據(jù)和物件,因為你能用schema確保XML文件內(nèi)容的合理性,因為XML是基于文本的規(guī)范,XML為跨平臺通訊標(biāo)準(zhǔn)提供了一個極其方便的基本格式。如果你還從來沒碰到Web服務(wù),你可能很快就會碰到,在未來5年內(nèi),你幾乎肯定會碰到。熟悉Web服務(wù)十分重要,因為它是目前所有跨不同機器、不同語言、不同平臺和不同地點的通訊協(xié)議中最簡單的一個。不管你需要與否,Web服務(wù)是邁向互用性的重要一步。 XML工作組主席John Bosak曾說XML“給Java一些事做”。實際上,Web服務(wù)讓所有語言都有了一些事做。Web服務(wù)讓在大型機上運行的COBOL應(yīng)用軟件能調(diào)用在手持設(shè)備上運行的Java應(yīng)用程序、能讓Java applet與.NET服務(wù)器交談、能讓微機軟件與Web服務(wù)器無縫連接,并提供了一個相對容易的方法,讓企業(yè)不光能向外界提供數(shù)據(jù),還能提供功能,而且是一種與語言、平臺和位置都獨立的方法。 3. 面向?qū)ο蟮木幊? 很多程序員仍認為OOP是象牙塔里的技術(shù)。但如果你想一下是什么語言在過去的10年里占主導(dǎo)地位,你就會理解OOP不是象牙塔里的技術(shù)。OOP從Smalltalk開始,傳到C++和Pascal (Delphi)。Java使OOP大踏步地邁向主流,幾年后的VB.NET和C#則完全確立了OOP的優(yōu)勢地位。盡管這些語言中的多數(shù)并不要求你必須會OOP,但我覺得如果你不了解OOP的基本概念也不知道如何應(yīng)用這些概念,你能找到的編程工作將越來越少。 4. Java、C++、C#和VB.NET 我把這些語言列在一起,并不是建議你成為每一種語言的專家。我的理由是:學(xué)習(xí)編程最有效的方法之一是看代碼,而你能看到的大量的代碼很可能不是用你所喜愛的語言編寫的。 在過去幾年,各語言的能力越來越接近?,F(xiàn)在,你可以用VB.NET寫Windows服務(wù)、Web應(yīng)用程序或命令行程序。即使你只使用一種語言,你也應(yīng)該學(xué)一些其它語言,以便能看懂那些樣例,并將其翻譯到你所用的語言。這4種語言是基本核心,還有其它一些滿足不同需要、頗具用途的語言,如FORTRAN、COBOL、APL、ADA、Perl和Lisp。 5. javascript 盡管名字有些相像,但Java與javascript并無關(guān)聯(lián)。為什么一個腳本語言會如此重要呢?因為所有主流瀏覽器都用javascript。如果你需要寫Web應(yīng)用程序,你就有足夠的理由學(xué)javascript。javascript可以用作ASP或ASP.NET的服務(wù)器語言,也可以當(dāng)做用于擴展XSLT的功能語言(functional language)。javascript是Mozilla/Netscape中用于激活基于XUL的程序接口的首選語言。javascript的一個變種ActionScript是Flash MX的編程語言。將來,javascript很可能成為新設(shè)備的編程語言,以及大型應(yīng)用軟件中的宏語言。 與javascript相對照的是VBScript。盡管Microsoft的軟件對VBScript有良好的支持,但VBScript在未來的開發(fā)工作中很可能是一個糟糕的選擇。就是Microsoft也傾向于用javascript(或Microsoft自己的變種:JScript)寫客戶端程序。在選擇腳本語言時,請選擇javascript。 6. 正則表達式(Regular Expressions) 查尋關(guān)系數(shù)據(jù)庫可以用SQL,查詢XML可以用XPath和XQuery,查詢純文本文件則可以用正則表達式。例如,你可以用一個命令從一個HTML文件中查找并刪除所有的注釋。各種開發(fā)語言內(nèi)置的一些簡單的文本查詢功能,如"IndexOf"函數(shù)或VB中經(jīng)典的"InStr"函數(shù)或"Like"操作符,根本不能與正則表達式相提并論?,F(xiàn)在,各種主要的開發(fā)語言都提供使用正則表達式的途徑。盡管正則表達式本身既難懂更難讀(是回到早期計算機時代的一種倒退),但它卻是一個功能強大而且未被充分利用的工具。 7. 設(shè)計模式 正像OOP通過把對象分類以簡化編程一樣,設(shè)計模式對一些普遍的對象之間的交互進行分類,并賦予一個恰當(dāng)?shù)拿Q。OOP用得越多,設(shè)計模式就越有用。一些最常用的模式的名稱已經(jīng)變成了軟件開發(fā)領(lǐng)域共同使用的術(shù)語,所以要跟上信息的主流,你就要對設(shè)計模式有相當(dāng)?shù)睦斫狻? 8. Flash MX 如果你需要在客戶端得到比HTML和CSS更多的圖形和更強的編程功能,F(xiàn)lash是你的答案。用Flash編程比開發(fā)Java applets或?qū)?NET代碼要快得多,也容易得多。 在最新版本 (MX) 中,F(xiàn)lash不僅僅是畫圖和制造動畫的工具,它已經(jīng)成為一個編程功能強大的開發(fā)環(huán)境:能調(diào)用SOAP Web服務(wù),也能調(diào)用遠端服務(wù)器上的ColdFusion、Java或.NET程序。Flash無處不在。它的引擎存在于世界上大多數(shù)客戶端計算機,包括手持設(shè)備、置頂盒、甚至是新的書寫板電腦。所以使用Flash能大大擴展你的程序的應(yīng)用范圍。 9. Linux/Windows 熟悉Linux。在一臺舊機器或新機器上安裝Linux。下載圖形用戶界面,在其基礎(chǔ)上寫一些程序。安裝Apache,寫一個Web應(yīng)用程序。這個世界不再僅僅是屬于Windows,這種趨勢可能還會持續(xù)下去。如果你是一名中堅的Linux開發(fā)人員,那就拋棄你對Windows的憎惡,看看你能否做一些Windows編程。Windows能繼續(xù)在臺式電腦上稱王是有其原因的,這不僅僅是因為Microsoft控制了這個市場。 沒人知道你們公司會在什么時候決定從Linux轉(zhuǎn)向Windows(或從Windows轉(zhuǎn)向Linux),或者你想跳到一家用另一種平臺的公司,或者你想出了開發(fā)一個殺手軟件的好主意,所以你要爭取擁有在不同操作系統(tǒng)上的編程經(jīng)驗。 10. SQL 盡管SQL不像本文討論的其它技術(shù)那樣新,而且SQL的重要性在未來10年內(nèi)很可能降低,但它仍然是一項基本技能。很多開發(fā)人員還沒有掌握這門技術(shù),或掌握得不夠,不足以有效率地使用它。不要依賴具有圖形用戶界面的SQL生成器替你做事情,你要自己手工地寫查詢命令,直到你熟悉基本的SQL語法為止。了解SQL不僅能幫助你日后學(xué)習(xí)XQuery,你還有可能馬上發(fā)現(xiàn)能簡化或改進目前項目的方法。 培養(yǎng)好奇心 最后,(對,我意識到這是第11門技術(shù)),好奇心是你最重要的技能。要去嘗試各種東西。新語言或新技術(shù)對你當(dāng)前或?qū)淼墓ぷ骺赡苡杏?,也可能沒用,但并不是你所學(xué)的每一件事都是為了工作。不要害怕失敗,萬事開頭難,學(xué)新技術(shù)也是如此。大多數(shù)失敗是因為人們希望太快地學(xué)到太多的東西。要對每一點進步感到滿意,不要讓時間(或缺乏時間)妨礙你。相反,你要安排時間留心、研究、試驗新的開發(fā)技術(shù)和工具。 你可能永遠也沒有必要成為這些技術(shù)的專家,而且我的選擇可能根本不適合你的特殊情況,但通過培養(yǎng)好奇心,你將會發(fā)現(xiàn)你應(yīng)該了解的東西。
網(wǎng)站欄目:vb.netxpath的簡單介紹
網(wǎng)頁地址:http://m.rwnh.cn/article8/doopjop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、電子商務(wù)、做網(wǎng)站、網(wǎng)站維護、品牌網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)