VB.Net - XML 處理



可擴充套件標記語言 (XML) 是一種標記語言,類似於 HTML 或 SGML。這是全球資訊網聯盟推薦的開放標準。

.Net Framework 中的System.Xml名稱空間包含用於處理 XML 文件的類。以下是 System.Xml 名稱空間中一些常用的類。

序號 類和描述
1

XmlAttribute

表示一個屬性。屬性的有效值和預設值在文件型別定義 (DTD) 或模式中定義。

2

XmlCDataSection

表示一個 CDATA 節。

3

XmlCharacterData

提供文字操作方法,這些方法被多個類使用。

4

XmlComment

表示 XML 註釋的內容。

5

XmlConvert

編碼和解碼 XML 名稱,並提供在公共語言執行時型別和 XML 架構定義語言 (XSD) 型別之間進行轉換的方法。轉換資料型別時,返回的值與區域設定無關。

6

XmlDeclaration

表示 XML 宣告節點 <?xml version='1.0'...?>。

7

XmlDictionary

實現一個字典,用於最佳化 Windows 通訊基礎 (WCF) 的 XML 讀/寫器實現。

8

XmlDictionaryReader

一個抽象類,Windows 通訊基礎 (WCF) 從 XmlReader 派生出來以進行序列化和反序列化。

9

XmlDictionaryWriter

表示一個抽象類,Windows 通訊基礎 (WCF) 從 XmlWriter 派生出來以進行序列化和反序列化。

10

XmlDocument

表示一個 XML 文件。

11

XmlDocumentFragment

表示一個輕量級物件,對於樹插入操作很有用。

12

XmlDocumentType

表示文件型別宣告。

13

XmlElement

表示一個元素。

14

XmlEntity

表示實體宣告,例如 <!ENTITY... >。

15

XmlEntityReference

表示一個實體引用節點。

16

XmlException

返回關於最後一個異常的詳細資訊。

17

XmlImplementation

定義一組 XmlDocument 物件的上下文。

18

XmlLinkedNode

獲取緊接在此節點之前或之後的節點。

19

XmlNode

表示 XML 文件中的單個節點。

20

XmlNodeList

表示節點的有序集合。

21

XmlNodeReader

表示一個讀取器,它提供對 XmlNode 中 XML 資料的快速、非快取的僅向前訪問。

22

XmlNotation

表示符號宣告,例如 <!NOTATION... >。

23

XmlParserContext

提供 XmlReader 解析 XML 片段所需的所有上下文資訊。

24

XmlProcessingInstruction

表示處理指令,XML 將其定義為將處理器特定資訊儲存在文件文字中。

25

XmlQualifiedName

表示一個 XML 限定名稱。

26

XmlReader

表示一個讀取器,它提供對 XML 資料的快速、非快取的僅向前訪問。

27

XmlReaderSettings

指定由 Create 方法建立的 XmlReader 物件上要支援的一組功能。

28

XmlResolver

解析由統一資源識別符號 (URI) 命名的外部 XML 資源。

29

XmlSecureResolver

透過包裝 XmlResolver 物件並限制底層 XmlResolver 可以訪問的資源來幫助保護 XmlResolver 的另一個實現。

30

XmlSignificantWhitespace

表示混合內容節點中標記之間的空白或 xml:space= 'preserve' 範圍內的空白。這也被稱為重要空白。

31

XmlText

表示元素或屬性的文字內容。

32

XmlTextReader

表示一個讀取器,它提供對 XML 資料的快速、非快取的僅向前訪問。

33

XmlTextWriter

表示一個寫入器,它提供一種快速、非快取、僅向前的方式來生成包含符合 W3C 可擴充套件標記語言 (XML) 1.0 和 XML 中的名稱空間建議的 XML 資料的流或檔案。

34

XmlUrlResolver

解析由統一資源識別符號 (URI) 命名的外部 XML 資源。

35

XmlWhitespace

表示元素內容中的空白。

36

XmlWriter

表示一個寫入器,它提供一種快速、非快取、僅向前的方式來生成包含 XML 資料的流或檔案。

37

XmlWriterSettings

指定由 XmlWriter.Create 方法建立的 XmlWriter 物件上要支援的一組功能。

XML 解析器 API

用於 XML 資料的兩個最基本和最廣泛使用的 API 是 SAX 和 DOM 介面。

  • 用於 XML 的簡單 API (SAX) - 在這裡,您為感興趣的事件註冊回撥,然後讓解析器遍歷文件。當您的文件很大或您有記憶體限制時,這很有用,它在從磁碟讀取檔案時解析檔案,並且整個檔案永遠不會儲存在記憶體中。

  • 文件物件模型 (DOM) API - 這是全球資訊網聯盟的推薦,其中整個檔案被讀入記憶體並存儲在分層(基於樹)的形式中,以表示 XML 文件的所有特徵。

在處理大型檔案時,SAX 的處理速度顯然不如 DOM 快。另一方面,僅使用 DOM 會嚴重影響您的資源,尤其是在處理大量小檔案時。

SAX 是隻讀的,而 DOM 允許更改 XML 檔案。由於這兩個不同的 API 實際上是互補的,因此沒有理由不能將它們都用於大型專案。

對於我們所有的 XML 程式碼示例,讓我們使用一個簡單的 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>

使用 SAX API 解析 XML

在 SAX 模型中,您使用XmlReaderXmlWriter類來處理 XML 資料。

XmlReader類用於以快速、僅向前且非快取的方式讀取 XML 資料。它讀取 XML 文件或流。

示例 1

此示例演示從檔案 movies.xml 讀取 XML 資料。

執行以下步驟 -

  • 將 movies.xml 檔案新增到應用程式的 bin\Debug 資料夾中。

  • 在 Form1.vb 檔案中匯入 System.Xml 名稱空間。

  • 在窗體中新增一個標籤,並將文字更改為“電影多多”。

  • 新增三個列表框和三個按鈕,以顯示來自 xml 檔案的電影標題、型別和描述。

  • 使用程式碼編輯器視窗新增以下程式碼。

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 工具欄上的啟動按鈕執行並執行以上程式碼。單擊按鈕將顯示來自檔案電影的標題、型別和描述。

VB.Net XML Processing Example 1

XmlWriter類用於將 XML 資料寫入流、檔案或 TextWriter 物件。它也以僅向前、非快取的方式工作。

示例 2

讓我們透過在執行時新增一些資料來建立一個 XML 檔案。執行以下步驟 -

  • 在窗體中新增一個 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 工具欄上的啟動按鈕執行並執行以上程式碼。單擊“顯示作者檔案”將顯示在 Web 瀏覽器上新建立的 authors.xml 檔案。

VB.Net XML Processing Example 2

使用 DOM API 解析 XML

根據文件物件模型 (DOM),XML 文件由節點和節點的屬性組成。XmlDocument類用於實現 .Net Framework 的 XML DOM 解析器。它還允許您透過插入、刪除或更新文件中的資料來修改現有的 XML 文件。

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

序號 方法名稱和描述
1

AppendChild

將指定的節點新增到此節點的子節點列表的末尾。

2

CreateAttribute(String)

建立一個具有指定名稱的 XmlAttribute。

3

CreateComment

建立一個包含指定資料的 XmlComment。

4

CreateDefaultAttribute

建立一個具有指定字首、本地名稱和名稱空間 URI 的預設屬性。

5

CreateElement(String)

建立一個具有指定名稱的元素。

6

CreateNode(String, String, String)

建立一個具有指定節點型別、名稱和 NamespaceURI 的 XmlNode。

7

CreateNode(XmlNodeType, String, String)

建立一個具有指定 XmlNodeType、名稱和 NamespaceURI 的 XmlNode。

8

CreateNode(XmlNodeType, String, String, String)

建立一個具有指定 XmlNodeType、字首、名稱和 NamespaceURI 的 XmlNode。

9

CreateProcessingInstruction

建立一個具有指定名稱和資料的 XmlProcessingInstruction。

10

CreateSignificantWhitespace

建立一個 XmlSignificantWhitespace 節點。

11

CreateTextNode

建立一個具有指定文字的 XmlText。

12

CreateWhitespace

建立一個 XmlWhitespace 節點。

13

CreateXmlDeclaration

建立一個具有指定值的 XmlDeclaration 節點。

14

GetElementById

獲取具有指定 ID 的 XmlElement。

15

GetElementsByTagName(String)

返回一個 XmlNodeList,其中包含與指定名稱匹配的所有後代元素的列表。

16

GetElementsByTagName(String, String)

返回一個 XmlNodeList,其中包含與指定的 LocalName 和 NamespaceURI 匹配的所有後代元素的列表。

17

InsertAfter

將指定的節點插入到指定的參考節點之後。

18

InsertBefore

將指定的節點插入到指定的參考節點之前。

19

Load(Stream)

從指定的流載入 XML 文件。

20

Load(String)

從指定的 URL 載入 XML 文件。

21

Load(TextReader)

從指定的 TextReader 載入 XML 文件。

22

Load(XmlReader)

從指定的 XmlReader 載入 XML 文件。

23

LoadXml

從指定的字串載入 XML 文件。

24

PrependChild

將指定的節點新增到此節點的子節點列表的開頭。

25

ReadNode

基於 XmlReader 中的資訊建立一個 XmlNode 物件。讀取器必須定位在節點或屬性上。

26

RemoveAll

刪除當前節點的所有子節點和/或屬性。

27

RemoveChild

刪除指定的子節點。

28

ReplaceChild

用 newChild 節點替換子節點 oldChild。

29

Save(Stream)

將 XML 文件儲存到指定的流。

30

Save(String)

將 XML 文件儲存到指定的檔案。

31

Save(TextWriter)

將 XML 文件儲存到指定的 TextWriter。

32

Save(XmlWriter)

將 XML 文件儲存到指定的 XmlWriter。

示例 3

在此示例中,讓我們在 xml 文件 authors.xml 中插入一些新節點,然後在列表框中顯示所有作者的姓。

執行以下步驟 -

  • 將 authors.xml 檔案新增到應用程式的 bin/Debug 資料夾中(如果您嘗試過上一個示例,則該檔案應該已經存在)。

  • 匯入 System.Xml 名稱空間。

  • 在窗體中新增一個列表框和一個按鈕控制元件,並將按鈕控制元件的 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
      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 工具欄中的啟動按鈕執行並執行以上程式碼。單擊“顯示作者”按鈕將顯示所有作者(包括我們在執行時新增的作者)的姓名。

VB.Net XML Processing Example 3
廣告