Dim?xmlDoc?As?New?System.Xml.XmlDocument
創(chuàng)新互聯(lián)建站專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、巴楚網(wǎng)站定制設(shè)計、自適應品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計、商城開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應式網(wǎng)頁設(shè)計等建站業(yè)務,價格優(yōu)惠性價比高,為巴楚等各大城市提供網(wǎng)站開發(fā)制作服務。
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
//創(chuàng)建XMLdocument
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
// 從XML文件中加載XML
doc.Load(XmlPath);
//為doc的根節(jié)點創(chuàng)建子節(jié)點nodeA(沒有添加到根節(jié)點上?。?/p>
System.Xml.XmlNode nodeA = doc.CreateNode(System.Xml.XmlNodeType.Element, "SAMPLE_ADD", "SAMPLEURI_ADD");
//為子節(jié)點nodeA設(shè)置屬性
nodeA.Value = "SAMPLE VALUE ADD";
//將nodeA添加為doc的子節(jié)點
doc.AppendChild(nodeA);
//為nodeA節(jié)點創(chuàng)建子節(jié)點nodeAA(沒有添加到nodeA節(jié)點上!)
System.Xml.XmlNode nodeAA = nodeA.CreateNode(System.Xml.XmlNodeType.Element, "SAMPLE_ADD2", "SAMPLEURI_ADD2");
//為子節(jié)點nodeAA設(shè)置屬性
nodeAA.Value = "SAMPLE VALUE ADD2";
//將nodeAA添加為nodeA的子節(jié)點
nodeA.AppendChild(nodeAA);
//遍歷nodeA下面的所有子節(jié)點
foreach (System.Xml.XmlNode node in nodeA.ChildNodes)
{
//處理這些節(jié)點
}
//刪除節(jié)點的做法是遍歷該節(jié)點然后吧符合條件的刪除掉
foreach (System.Xml.XmlNode node in doc.ChildNodes)
{
// 將節(jié)點從父上刪除
doc.RemoveChild(node);
}
使用System.XML
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Xml
namespace HowTo.Samples.XML
public class WriteXmlFileSample
private const document as string = "newbooks.xml"
shared sub Main()
Dim myWriteXmlFileSample as WriteXmlFileSample
myWriteXmlFileSample = new WriteXmlFileSample()
myWriteXmlFileSample.Run(document)
end sub
public sub Run(args As String)
Dim myXmlTextReader as XmlTextReader = nothing
Dim myXmlTextWriter as XmlTextWriter = nothing
try
myXmlTextWriter = new XmlTextWriter (args, nothing)
myXmlTextWriter.Formatting = System.Xml.Formatting.Indented
myXmlTextWriter.WriteStartDocument(false)
myXmlTextWriter.WriteDocType("bookstore", nothing, "books.dtd", nothing)
myXmlTextWriter.WriteComment("此文件表示書店庫存數(shù)據(jù)庫的另一個片斷")
myXmlTextWriter.WriteStartElement("bookstore")
myXmlTextWriter.WriteStartElement("book", nothing)
myXmlTextWriter.WriteAttributeString("genre","autobiography")
myXmlTextWriter.WriteAttributeString("publicationdate","1979")
myXmlTextWriter.WriteAttributeString("ISBN","0-7356-0562-9")
myXmlTextWriter.WriteElementString("title", nothing, "The Autobiography of Mark Twain")
myXmlTextWriter.WriteStartElement("Author", nothing)
myXmlTextWriter.WriteElementString("first-name", "Mark")
myXmlTextWriter.WriteElementString("last-name", "Twain")
myXmlTextWriter.WriteEndElement()
myXmlTextWriter.WriteElementString("price", "7.99")
myXmlTextWriter.WriteEndElement()
myXmlTextWriter.WriteEndElement()
'向文件寫 XML 并關(guān)閉編寫器
myXmlTextWriter.Flush()
myXmlTextWriter.Close()
' 讀取返回的文件并進行分析以確保正確生成 XML
myXmlTextReader = new XmlTextReader (args)
FormatXml (myXmlTextReader, args)
catch e as Exception
Console.WriteLine ("異常:{0}", e.ToString())
finally
Console.WriteLine()
Console.WriteLine("對文件 {0} 的處理已完成。", args)
If Not myXmlTextReader Is Nothing
myXmlTextReader.Close()
end if
'關(guān)閉編寫器
If Not myXmlTextWriter Is Nothing
myXmlTextWriter.Close()
end if
End try
End Sub
private shared Sub FormatXml (reader as XmlTextReader, filename as String)
Dim piCount, docCount, commentCount, elementCount as Integer
Dim attributeCount, textCount, whitespaceCount as Integer
While reader.Read()
Select (reader.NodeType)
case XmlNodeType.ProcessingInstruction:
Format (reader, "ProcessingInstruction")
piCount += 1
case XmlNodeType.DocumentType:
Format (reader, "DocumentType")
docCount += 1
case XmlNodeType.Comment:
Format (reader, "Comment")
commentCount += 1
case XmlNodeType.Element:
Format (reader, "Element")
elementCount += 1
While reader.MoveToNextAttribute()
Format (reader, "Attribute")
end While
if (reader.HasAttributes)
attributeCount += reader.AttributeCount
end if
case XmlNodeType.Text:
Format (reader, "Text")
textCount += 1
case XmlNodeType.Whitespace:
whitespaceCount += 1
End Select
End While
' 顯示該文件的統(tǒng)計信息
Console.WriteLine ()
Console.WriteLine("{0} 文件的統(tǒng)計信息", filename)
Console.WriteLine ()
Console.WriteLine("處理指令:" piCount)
Console.WriteLine("文檔類型:" docCount)
Console.WriteLine("注釋:" commentCount)
Console.WriteLine("元素:" elementCount)
Console.WriteLine("屬性:" attributeCount)
Console.WriteLine("文本:" textCount)
Console.WriteLine("空白:" whitespaceCount)
End Sub
private shared Sub Format(byref reader as XmlTextReader , NodeType as String)
' 格式化輸出
Console.Write(reader.Depth " ")
Console.Write(reader.AttributeCount " ")
Dim i as Integer
for i = 0 to reader.Depth - 1
Console.Write(Strings.chr(9))
Next
Console.Write(reader.Prefix NodeType "" reader.Name "" reader.Value)
Console.WriteLine()
End Sub
End Class
End Namespace
參考:
萬事俱備,我們先用VB和MSXML的COM接口的DOM實現(xiàn)的一個例子來對XML操作進行初步的了解吧。首先聲明下面要用的幾個對象的變量:Dim tempdoc As DOMDocument
Dim tempnode As IXMLDOMNode
Dim tempelement As IXMLDOMElement
Dim tempattribute As IXMLDOMElement
Dim root As IXMLDOMElement文檔對象模型(DOM)使用了一系列相應的對象描述了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é)點的標記名
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日</出生日期><地址>福建省廈門市集美大學水產(chǎn)學院新區(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文檔的工具,但是,對其的應用要求程序員對VB和MSXML的COM接口有一定的認識,所以,并不是得到很廣泛的應用。
作者:洪萬福出處:微軟社區(qū)責任編輯: 方舟 [ 2003-08-20 10:45 ] 本文為計劃將應用程序更新到VB.NET的VB開發(fā)用戶提供一些關(guān)于XML的建議 Visual Basic.NET的出現(xiàn)大大改變了這個狀況,Visual Basic.NET提供了使用XML、XSL以及其他XML工具的完整工具,使用戶很輕松就能實現(xiàn)XML的應用,甚至,在不用編寫代碼的情況下操作XML。ADO.NET是Microsoft新推出的.NET框架中用于數(shù)據(jù)訪問的組件,其最大的優(yōu)點就是使用XML作為傳送數(shù)據(jù)的標準,只要有一個XML文本,就可以讀入ADO.NET的組件中,然后ADO.NET再以XML格式傳給數(shù)據(jù)庫或者其他組件。可以使用DataSet對象的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
先讀取節(jié)點Match,然后讀取節(jié)點內(nèi)的各個屬性值。 再進行節(jié)點中的子節(jié)點SetSetName的讀取,讀取方式也是直接讀取各個屬性值。
這個應該沒有問題的。看起來比較輕松的。。
代碼調(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é)點
private
void
AddElement()
{
LoadXML();
XMLNode
XMLdocSelect=XMLDoc.SelectSingleNode("user");
XMLElement
el=XMLDoc.CreateElement("person");
//添加person節(jié)點
el.SetAttribute("name","風云");
//添加person節(jié)點的屬性"name"
el.SetAttribute("sex","女");
//添加person節(jié)點的屬性
"sex"
el.SetAttribute("age","25");
//添加person節(jié)點的屬性
"age"
XMLElement
xesub1=XMLDoc.CreateElement("pass");
//添加person節(jié)點的里的節(jié)點
xesub1.InnerText="123";//設(shè)置文本節(jié)點
el.AppendChild(xesub1);
XMLElement
xesub2=XMLDoc.CreateElement("Address");
xesub2.InnerText="昆明";//設(shè)置文本節(jié)點
el.AppendChild(xesub2);
XMLdocSelect.AppendChild(el);
XMLDoc.Save(Server.MapPath("user.XML"));
}
//修改節(jié)點
private
void
UpdateElement()
{
LoadXML();
XMLNodeList
nodeList=XMLDoc.SelectSingleNode("user").ChildNodes;//獲取bookstore節(jié)點的所有子節(jié)點
foreach(XMLNode
xn
in
nodeList)//遍歷所有子節(jié)點
{
XMLElement
xe=(XMLElement)xn;//將子節(jié)點類型轉(zhuǎn)換為XMLElement類型
if(xe.GetAttribute("name")=="風云")//如果name屬性值為“風云”
{
xe.SetAttribute("name","發(fā)明");
//如果下面有子節(jié)點在下走
XMLNodeList
nls=xe.ChildNodes;//繼續(xù)獲取xe子節(jié)點的所有子節(jié)點
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é)點
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é)點的全部內(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é)點點文本
//
}
}
}
XML的樣式:
?xml
version="1.0"
encoding="gb2312"?
user
person
/person
person
name="風拉"
sex="男"
age="25"
pass123/pass
Address大明/Address
/person
person
name="風云"
sex="女"
age="25"
pass123/pass
Address昆明/Address
/person
/user
新聞名稱:包含vb.netxml屬性的詞條
地址分享:http://www.rwnh.cn/article8/dooheop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、外貿(mào)建站、品牌網(wǎng)站制作、定制網(wǎng)站、移動網(wǎng)站建設(shè)
聲明:本網(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)