当前位置: 首页 > 文档资料 > VB.Net 中文教程 >

XML处理( XML Processing)

优质
小牛编辑
136浏览
2023-12-01

可扩展标记语言(XML)是一种非常类似于HTML或SGML的标记语言。 这是万维网联盟推荐的,可作为开放标准提供。

.Net Framework中的System.Xml命名空间包含用于处理XML文档的类。 以下是System.Xml命名空间中的一些常用类。

Sr.No.类和描述
1

XmlAttribute

表示属性。 属性的有效值和默认值在文档类型定义(DTD)或模式中定义。

2

XmlCDataSection

表示CDATA部分。

3

XmlCharacterData

提供几个类使用的文本操作方法。

4

XmlComment

表示XML注释的内容。

5

XmlConvert

对XML名称进行编码和解码,并提供在公共语言运行时类型和XML模式定义语言(XSD)类型之间进行转换的方法。 转换数据类型时,返回的值与语言环境无关。

6

XmlDeclaration

表示XML声明节点。

7

XmlDictionary

实现用于优化Windows Communication Foundation(WCF)的XML读取器/写入器实现的字典。

8

XmlDictionaryReader

Windows Communication Foundation(WCF)从XmlReader派生的抽象类,用于执行序列化和反序列化。

9

XmlDictionaryWriter

表示Windows Communication Foundation(WCF)从XmlWriter派生以进行序列化和反序列化的抽象类。

10

XmlDocument

表示XML文档。

11

XmlDocumentFragment

表示一个对树插入操作很有用的轻量级对象。

12

XmlDocumentType

表示文档类型声明。

13

XmlElement

表示一个元素。

14

XmlEntity

表示实体声明,例如。

15

XmlEntityReference

表示实体引用节点。

16

XmlException

返回有关上一个异常的详细信息。

17

XmlImplementation

定义一组XmlDocument对象的上下文。

18

XmlLinkedNode

获取紧邻此节点之前或之后的节点。

19

XmlNode

表示XML文档中的单个节点。

20

XmlNodeList

表示有序的节点集合。

21

XmlNodeReader

表示一个读者,它在XmlNode中提供对XML数据的快速,非缓存前向访问。

22

XmlNotation

表示符号声明,例如。

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

表示一个编写器,它提供快速,非缓存,仅向前生成包含XML数据的流或文件的方式,这些数据符合W3C可扩展标记语言(XML)1.0和XML建议中的命名空间。

34

XmlUrlResolver

解析由统一资源标识符(URI)命名的外部XML资源。

35

XmlWhitespace

表示元素内容中的空格。

36

XmlWriter

表示一个编写器,它提供快速,非缓存,仅向前的方法来生成包含XML数据的流或文件。

37

XmlWriterSettings

指定一组要在XmlWriter.Create方法创建的XmlWriter对象上支持的功能。

XML Parser API

XML数据的两个最基本和最广泛使用的API是SAX和DOM接口。

  • Simple API for XML (SAX) - 在这里,您为感兴趣的事件注册回调,然后让解析器继续处理文档。 当文档很大或存在内存限制时,这很有用,它会在从磁盘读取文件时解析文件,并且整个文件永远不会存储在内存中。

  • Document Object Model (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 (Example 1)

此示例演示如何从文件movies.xml中读取XML数据。

采取以下步骤 -

  • 将movies.xml文件添加到应用程序的bin\Debug文件夹中。

  • 在Form1.vb文件中导入System.Xml命名空间。

  • 在表单中添加标签并将其文本更改为“Movies Galore”。

  • 添加三个列表框和三个按钮,以显示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 = "iowiki.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工具栏上的“ Start按钮执行并运行上述代码。 单击按钮将显示文件中电影的标题,类型和描述。

VB.Net XML处理示例1

XmlWriter类用于将XML数据写入流,文件或TextWriter对象。 它也以前向,非缓存方式工作。

例子2 (Example 2)

让我们通过在运行时添加一些数据来创建XML文件。 采取以下步骤 -

  • 在表单中添加WebBrowser控件和按钮控件。

  • 将按钮的Text属性更改为Show Authors File。

  • 在代码编辑器中添加以下代码。

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 = "iowiki.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工具栏上的“ Start按钮执行并运行上述代码。 单击“显示作者文件”将在Web浏览器上显示新创建的authors.xml文件。

VB.Net XML处理示例2

使用DOM API解析XML

根据文档对象模型(DOM),XML文档由节点和节点的属性组成。 XmlDocument类用于实现.Net Framework的XML DOM解析器。 它还允许您通过插入,删除或更新文档中的数据来修改现有XML文档。

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

Sr.No.方法名称和描述
1

AppendChild

将指定节点添加到此节点的子节点列表的末尾。

2

CreateAttribute(String)

使用指定的Name创建XmlAttribute。

3

CreateComment

创建包含指定数据的XmlComment。

4

CreateDefaultAttribute

使用指定的前缀,本地名称和名称空间URI创建默认属性。

5

CreateElement(String)

创建具有指定名称的元素。

6

CreateNode(String, String, String)

使用指定的节点类型,Name和NamespaceURI创建XmlNode。

7

CreateNode(XmlNodeType, String, String)

使用指定的XmlNodeType,Name和NamespaceURI创建XmlNode。

8

CreateNode(XmlNodeType, String, String, String)

使用指定的XmlNodeType,Prefix,Name和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,其中包含与指定Name匹配的所有后代元素的列表。

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 (Example 3)

在这个例子中,让我们在xml文档authors.xml中插入一些新节点,然后在列表框中显示所有作者的名字。

采取以下步骤 -

  • 将authors.xml文件添加到应用程序的bin/Debug文件夹中(如果您尝试过最后一个示例,它应该在那里)

  • 导入System.Xml命名空间

  • 在窗体中添加一个列表框和一个按钮控件,并将按钮控件的text属性设置为Show Authors。

  • 使用代码编辑器添加以下代码。

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 = "iowiki.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工具栏上的“ Start按钮执行并运行上述代码。 单击“显示作者”按钮将显示所有作者的名字,包括我们在运行时添加的名称。

VB.Net XML处理示例3