VB.Net - XML處理

2022-05-26 11:43 更新

可擴(kuò)展標(biāo)記語言(XML)是一種非常類似于HTML或SGML的標(biāo)記語言。 這是萬維網(wǎng)聯(lián)盟推薦的,可作為開放標(biāo)準(zhǔn)。
.Net框架中的System.Xml命名空間包含用于處理XML文檔的類。 以下是System.Xml命名空間中常用的一些類。

SN描述
1XmlAttribute表示屬性。屬性的有效值和默認(rèn)值在文檔類型定義(DTD)或模式中定義。
2XmlCDataSection表示一個(gè)CDATA部分。
3XmlCharacterData提供由幾個(gè)類使用的文本處理方法。
4XMLCOMMENT表示一個(gè)XML注釋的內(nèi)容。
5XmlConvert對(duì)XML名稱進(jìn)行編碼和解碼,并提供在公共語言運(yùn)行時(shí)類型和XML模式定義語言(XSD)類型之間進(jìn)行轉(zhuǎn)換的方法。轉(zhuǎn)換數(shù)據(jù)類型時(shí),返回的值與語言環(huán)境無關(guān)。
6XmlDeclaration表示XML聲明節(jié)點(diǎn)<?xml version ='1.0'...?>。
7XmlDictionary實(shí)現(xiàn)本字典優(yōu)化 Windows 通信基礎(chǔ)(WCF) 的 XML 讀取器/編寫器實(shí)現(xiàn)。
8XmlDictionaryReaderWindows Communication Foundation(WCF)從XmlReader派生來進(jìn)行序列化和反序列化的抽象類。
9XmlDictionaryWriter表示W(wǎng)indows Communication Foundation(WCF)從XmlWriter派生來進(jìn)行序列化和反序列化的抽象類。
10XmlDocument表示XML文檔。
11XmlDocumentFragment表示對(duì)樹插入操作有用的輕量級(jí)對(duì)象。
12XmlDocumentType表示文檔類型聲明。
13XmlElement表示一個(gè)元素。
14XmlEntity表示一個(gè)實(shí)體聲明,如<!ENTITY ...>。
15XmlEntityReference表示一個(gè)實(shí)體引用節(jié)點(diǎn)。
16XmlException返回有關(guān)最后一個(gè)異常的詳細(xì)信息。
17XmlImplementation定義一組XmlDocument對(duì)象的上下文。
18XmlLinkedNode獲取此節(jié)點(diǎn)之前或之后的節(jié)點(diǎn)。
19XmlNode表示XML文檔中的單個(gè)節(jié)點(diǎn)。
20XmlNodeList表示節(jié)點(diǎn)的有序集合。
21XmlNodeReader表示提供對(duì)XmlNode中的XML數(shù)據(jù)的快速,非緩存轉(zhuǎn)發(fā)訪問的閱讀器。
22XmlNotation表示一個(gè)注釋聲明,如<!NOTATION ...>。
23XmlParserContext提供XmlReader解析XML片段所需的所有上下文信息。
24XmlProcessingInstruction表示處理指令,XML定義為在文檔的文本中保留處理器特定的信息。
25XmlQualifiedName表示一個(gè)XML限定名稱。
26XmlReader表示一個(gè)閱讀器,提供了快速,非緩存,只進(jìn)到XML數(shù)據(jù)訪問。
27XmlReaderSettings指定一組要在Create方法創(chuàng)建的XmlReader對(duì)象上支持的要素。
28XmlResolver解析由統(tǒng)一資源標(biāo)識(shí)符(URI)命名的外部XML資源。
29XmlSecureResolver有助于通過封裝XmlResolver對(duì)象并限制底層XmlResolver有權(quán)訪問的資源來保護(hù)XmlResolver的另一個(gè)實(shí)現(xiàn)。
30XmlSignificantWhitespace表示混合內(nèi)容節(jié)點(diǎn)中的標(biāo)記之間或xml:space ='preserve'范圍內(nèi)的空白空間中的空格。這也稱為有效的空白空間。
31XmlText表示元素或?qū)傩缘奈谋緝?nèi)容。
32XmlTextReader表示提供對(duì)XML數(shù)據(jù)的快速,非緩存,僅轉(zhuǎn)發(fā)訪問的閱讀器。
33XmlTextWriter代表作家提供了一個(gè)快速,非緩存,只進(jìn)生成包含符合W3C可擴(kuò)展標(biāo)記語言(XML)1.0和XML中建議的命名空間XML數(shù)據(jù)流或文件的方式。
34XmlUrlResolver解析由統(tǒng)一資源標(biāo)識(shí)符(URI)命名的外部XML資源。
35XmlWhitespace代表元素內(nèi)容中的空白。
36XmlWriter表示提供快速,非緩存,僅轉(zhuǎn)發(fā)方式生成包含XML數(shù)據(jù)的流或文件的寫入程序。
37XmlWriterSettings指定一組要在XmlWriter.Create方法創(chuàng)建的XmlWriter對(duì)象上支持的要素。

XML解析器的API

XML數(shù)據(jù)的兩個(gè)最基本和廣泛使用的API是SAX和DOM接口。
XML的簡單API(SAX):在這里,您注冊(cè)感興趣的事件的回調(diào),然后讓解析器繼續(xù)處理文檔。這在文檔很大或者有內(nèi)存限制時(shí)很有用,它在從磁盤讀取文件時(shí)解析文件,整個(gè)文件從不存儲(chǔ)在內(nèi)存中。
文檔對(duì)象模型(DOM)API:這是萬維網(wǎng)聯(lián)盟推薦,其中整個(gè)文件被讀入存儲(chǔ)器并以分層(基于樹)的形式存儲(chǔ)以表示XML文檔的所有特征。
SAX顯然不能像使用大文件時(shí)DOM那樣快速地處理信息。另一方面,使用DOM可以真正地殺死你的資源,特別是如果用于很多小文件。
SAX是只讀的,而DOM允許更改XML文件。由于這兩個(gè)不同的API字面上互補(bǔ),沒有理由你不能使用它們兩個(gè)大項(xiàng)目。
對(duì)于所有的XML代碼示例,讓我們使用一個(gè)簡單的XML文件movies.xml作為輸入:

<?xml version="1.0"?>

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

解析XML使用SAX API

在SAX模型中,使用XmlReader和XmlWriter類來處理XML數(shù)據(jù)。
XmlReader類用于以快速,僅向前和非緩存方式讀取XML數(shù)據(jù)。 它讀取XML文檔或流。

示例1

此示例演示從文件movies.xml中讀取XML數(shù)據(jù)。

執(zhí)行以下步驟:

  • 將movies.xml文件添加到應(yīng)用程序的bin \ Debug文件夾中。

  • 在Form1.vb文件中導(dǎo)入System.Xml命名空間。

  • 在表單中添加標(biāo)簽,并將其文字更改為“Movies Galore”。

  • 添加三個(gè)列表框和三個(gè)按鈕,以顯示來自xml文件的電影的標(biāo)題,類型和描述。

  • 使用代碼編輯器窗口添加以下代碼。

Imports System.Xml
Public Class Form1

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "tutorialspoint.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      ListBox1().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
          If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "movie" Then
              ListBox1.Items.Add(xr.GetAttribute(0))
          End If
      Loop
   End Sub
   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      ListBox2().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
          If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "type" Then
              ListBox2.Items.Add(xr.ReadElementString)
          Else
              xr.Read()
          End If
      Loop
   End Sub
   Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
      ListBox3().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
          If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "description" Then
              ListBox3.Items.Add(xr.ReadElementString)
          Else
              xr.Read()
          End If
      Loop
   End Sub
End Class

使用Microsoft Visual Studio工具欄上的“開始”按鈕執(zhí)行并運(yùn)行上述代碼。 單擊按鈕將顯示文件中電影的標(biāo)題,類型和描述。

VB.Net XML處理示例1

XmlWriter類用于將XML數(shù)據(jù)寫入流,文件或TextWriter對(duì)象。 它也以只向前,非緩存的方式工作。

示例2

讓我們通過在運(yùn)行時(shí)添加一些數(shù)據(jù)來創(chuàng)建一個(gè)XML文件。 執(zhí)行以下步驟:

  • 在窗體中添加WebBrowser控件和按鈕控件。

  • 將按鈕的Text屬性更改為顯示作者文件。

  • 在代碼編輯器中添加以下代碼。

Imports System.Xml
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "tutorialspoint.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim xws As XmlWriterSettings = New XmlWriterSettings()
      xws.Indent = True
      xws.NewLineOnAttributes = True
      Dim xw As XmlWriter = XmlWriter.Create("authors.xml", xws)
      xw.WriteStartDocument()
      xw.WriteStartElement("Authors")
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "1")
      xw.WriteElementString("fname", "Zara")
      xw.WriteElementString("lname", "Ali")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "2")
      xw.WriteElementString("fname", "Priya")
      xw.WriteElementString("lname", "Sharma")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "3")
      xw.WriteElementString("fname", "Anshuman")
      xw.WriteElementString("lname", "Mohan")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "4")
      xw.WriteElementString("fname", "Bibhuti")
      xw.WriteElementString("lname", "Banerjee")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "5")
      xw.WriteElementString("fname", "Riyan")
      xw.WriteElementString("lname", "Sengupta")
      xw.WriteEndElement()
      xw.WriteEndElement()
      xw.WriteEndDocument()
      xw.Flush()
      xw.Close()
      WebBrowser1.Url = New Uri(AppDomain.CurrentDomain.BaseDirectory + "authors.xml")
   End Sub
End Class

使用Microsoft Visual Studio工具欄上的“開始”按鈕執(zhí)行并運(yùn)行上述代碼。 單擊顯示作者文件將在Web瀏覽器上顯示新創(chuàng)建的authors.xml文件。

VB.Net XML處理示例2

使用DOM API解析XML

根據(jù)文檔對(duì)象模型(DOM),XML文檔由節(jié)點(diǎn)和節(jié)點(diǎn)的屬性組成。 XmlDocument類用于實(shí)現(xiàn).Net框架的XML DOM解析器。 它還允許您通過插入,刪除或更新文檔中的數(shù)據(jù)來修改現(xiàn)有的XML文檔。

以下是XmlDocument類的一些常用方法:

SN方法名稱和說明
1

AppendChild

將指定的節(jié)點(diǎn)添加到此節(jié)點(diǎn)的子節(jié)點(diǎn)列表的末尾。

2

CreateAttribute(String)

使用指定的名稱創(chuàng)建XmlAttribute。

3

CreateComment

創(chuàng)建包含指定數(shù)據(jù)的XmlComment。

4

CreateDefaultAttribute

創(chuàng)建具有指定前綴,本地名稱和命名空間URI的默認(rèn)屬性。

5

CreateElement(String)

創(chuàng)建具有指定名稱的元素。

6

CreateNode(String, String, String)

創(chuàng)建具有指定節(jié)點(diǎn)類型,Name和NamespaceURI的XmlNode。

7

CreateNode(XmlNodeType, String, String)

創(chuàng)建具有指定的XmlNodeType,Name和NamespaceURI的XmlNode。

8

CreateNode(XmlNodeType, String, String, String)

創(chuàng)建具有指定的XmlNodeType,Prefix,Name和NamespaceURI的XmlNode。

9

CreateProcessingInstruction

創(chuàng)建具有指定名稱和數(shù)據(jù)的XmlProcessingInstruction。

10

CreateSignificantWhitespace

創(chuàng)建一個(gè)XmlSignificantWhitespace節(jié)點(diǎn)。

11

createTextNode

創(chuàng)建具有指定文本的XMLTEXT。

12

CreateWhitespace

創(chuàng)建一個(gè)XmlWhitespace節(jié)點(diǎn)。

13

CreateXmlDeclaration

創(chuàng)建一個(gè)具有指定值的XmlDeclaration節(jié)點(diǎn)。

14

GetElementById

獲取具有指定ID的XmlElement。

15

GetElementsByTagName(String)

返回一個(gè)包含與指定名稱匹配的所有后代元素的列表的XmlNodeList。

16

GetElementsByTagName(String, String)

返回一個(gè)包含與指定名稱匹配的所有后代元素的列表的XmlNodeList。

17

InsertAfter

在指定的引用節(jié)點(diǎn)之后立即插入指定的節(jié)點(diǎn)。

18

InsertBefore

在指定的引用節(jié)點(diǎn)之前插入指定的節(jié)點(diǎn)。

19

Load(Stream)

從指定的流裝載XML文檔。

20

Load(String)

從指定的TextReader加載XML文檔。

21

Load(TextReader)

從指定的TextReader加載XML文檔。

22

Load(XmlReader)

從指定的XmlReader加載XML文檔。

23

LoadXml

從指定的字符串加載XML文檔。

24

PrependChild

將指定的節(jié)點(diǎn)添加到此節(jié)點(diǎn)的子節(jié)點(diǎn)列表的開頭。

25

ReadNode

基于XmlReader中的信息創(chuàng)建XmlNode對(duì)象。讀取器必須位于節(jié)點(diǎn)或?qū)傩陨稀?

26

RemoveAll

刪除當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)和/或?qū)傩浴?

27

RemoveChild

刪除指定的子節(jié)點(diǎn)。

28

ReplaceChild

將子節(jié)點(diǎn)oldChild替換為newChild節(jié)點(diǎn)。

29

Save(Stream)

保存XML文檔到指定的流。

30

Save(String)

將XML文檔保存到指定的文件。

31

Save(TextWriter)

將XML文檔保存到指定的TextWriter。

32

Save(XmlWriter)

將XML文檔保存到指定的XmlWriter。

示例3

在本示例中,讓我們?cè)趚ml文檔authors.xml中插入一些新節(jié)點(diǎn),然后在列表框中顯示所有作者的名字。

執(zhí)行以下步驟:

  • 將authors.xml文件添加到應(yīng)用程序的bin / Debug文件夾中(如果您已經(jīng)嘗試了最后一個(gè)示例,應(yīng)該在那里)

  • 導(dǎo)入System.Xml命名空間

  • 在表單中添加列表框和按鈕控件,并將按鈕控件的text屬性設(shè)置為“顯示作者”。

  • 使用代碼編輯器添加以下代碼。

Imports System.Xml
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "tutorialspoint.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      ListBox1.Items.Clear()
      Dim xd As XmlDocument = New XmlDocument()
      xd.Load("authors.xml")
      Dim newAuthor As XmlElement = xd.CreateElement("author")
      newAuthor.SetAttribute("code", "6")
      Dim fn As XmlElement = xd.CreateElement("fname")
      fn.InnerText = "Bikram"
      newAuthor.AppendChild(fn)
      Dim ln As XmlElement = xd.CreateElement("lname")
      ln.InnerText = "Seth"
      newAuthor.AppendChild(ln)
      xd.DocumentElement.AppendChild(newAuthor)
      Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing)
      tr.Formatting = Formatting.Indented
      xd.WriteContentTo(tr)
      tr.Close()
      Dim nl As XmlNodeList = xd.GetElementsByTagName("fname")
      For Each node As XmlNode In nl
          ListBox1.Items.Add(node.InnerText)
      Next node
   End Sub
End Class

使用Microsoft Visual Studio工具欄上的“開始”按鈕執(zhí)行并運(yùn)行上述代碼。 單擊“顯示作者”按鈕將顯示所有作者的名字,包括我們?cè)谶\(yùn)行時(shí)添加的作者。

VB.Net XML處理示例3

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)