- VB.Net 基础教程
- VB.Net - 首页
- VB.Net - 概述
- VB.Net - 环境设置
- VB.Net - 程序结构
- VB.Net - 基本语法
- VB.Net - 数据类型
- VB.Net - 变量
- VB.Net - 常量
- VB.Net - 修饰符
- VB.Net - 语句
- VB.Net - 指令
- VB.Net - 运算符
- VB.Net - 决策
- VB.Net - 循环
- VB.Net - 字符串
- VB.Net - 日期和时间
- VB.Net - 数组
- VB.Net - 集合
- VB.Net - 函数
- VB.Net - 子程序
- VB.Net - 类和对象
- VB.Net - 异常处理
- VB.Net - 文件处理
- VB.Net - 基本控件
- VB.Net - 对话框
- VB.Net - 高级窗体
- VB.Net - 事件处理
- VB.Net 高级教程
- VB.Net - 正则表达式
- VB.Net - 数据库访问
- VB.Net - Excel 表格
- VB.Net - 发送邮件
- VB.Net - XML 处理
- VB.Net - Web编程
- VB.Net 有用资源
- VB.Net - 快速指南
- VB.Net - 有用资源
- VB.Net - 讨论
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 模型中,您使用XmlReader和XmlWriter类来处理 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 工具栏上的启动按钮执行并运行以上代码。单击按钮将显示来自文件电影的标题、类型和描述。
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 文件。
使用 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 工具栏中的启动按钮执行并运行以上代码。单击“显示作者”按钮将显示所有作者(包括我们在运行时添加的作者)的姓名。