深入探索XML处理:VisualBasic.NET工具全解析
发布时间: 2025-08-17 00:15:28 阅读量: 1 订阅数: 2 

### 深入探索 XML 处理:Visual Basic .NET 工具全解析
#### 1. XML 概述
XML(可扩展标记语言)在计算领域的重要性与日俱增。它用于为数据提供组织和结构,XML 文件是纯文本文件,包含数据以及用于组织数据的 XML 标记。
以下是一个简单的 XML 文件示例:
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<people>
<person type="friend">
<name>Ann Smith</name>
<address>35 Oak Street</address>
<city>Albany</city>
<state>NY</state>
<zipcode>12345</zipcode>
</person>
<person type="family">
<name>Jose Gomez</name>
<address>12A Western Boulevard</address>
<city>Sacramento</city>
<state>CA</state>
<zipcode>98765</zipcode>
</person>
</people>
```
对该文件的详细分析如下:
- 第一行是 XML 处理指令,表明文件为版本 1 的 XML 文件,使用 UTF - 8 编码。
- 第二行是文件根元素的开始标签,XML 标签通常成对出现,结束标签与开始标签相同,只是多了一个斜杠。文件最后一行是 `<people>` 元素的结束标签。
- 根元素包含两个 `<person>` 元素,每个 `<person>` 元素都有一个名为 “type” 的属性,这是 XML 文件存储数据的一种方式。
- 每个 `<person>` 元素包含子元素,如 `<name>`、`<address>` 等,这些子元素在开始标签和结束标签之间包含数据。
XML 标签或元素的名称是完全开放的,并且文件结构基本不受限制,但 XML 文档必须遵循 XML 语法规则。一个没有语法错误的 XML 文档被称为格式良好的文档。有时,需要对 XML 文件进行限制,可通过文档类型定义(DTDs)和 XML 模式(XML Schemas)来定义 XML 文档的结构。
XML 文档不涉及数据的显示方式,这是 XML 的优势之一,它将数据存储与数据显示完全分离。XML 文件的数据可以通过多种方式进行显示,如屏幕显示、打印输出、语音合成等。用于屏幕显示的主流技术是级联样式表(CSS)。此外,还可以使用可扩展样式表语言转换(XSLT)对 XML 文件进行转换。
#### 2. XML 标准与 W3C
XML 的重要性和普及性的主要原因之一是它是一个公共的、非专有的标准,不受任何商业利益的控制。XML 及其相关技术的标准由万维网联盟(W3C)制定,W3C 的成员包括企业、大学和政府机构等。通过公开的协商过程,W3C 制定了 XML、XML 模式和 XSLT 词汇表等标准。
#### 3. .NET 中的 XML 工具
.NET 中用于处理 XML 的大多数类位于 `System.Xml` 命名空间,主要介绍以下三个类:
- **XmlTextReader 类**:用于快速、仅向前读取 XML 文档,不支持修改文件内容或结构。它从文件开头开始,一次读取一个节点,不进行缓存,检查文档的格式良好性,但不进行验证。
- **XmlDocument 类**:实现了 W3C 文档对象模型(DOM)的第 1 级和第 2 级,提供对 XML 文档的随机缓存访问。整个文档作为节点树存储在内存中,可用于修改 XML 文档的数据和结构,但速度较慢,对系统资源要求较高。
- **XmlValidatingReader 类**:用于对 XML 文档进行验证,它不能单独工作,需要与 `XmlTextReader` 或 `XmlDocument` 实例一起使用,可以根据 DTD 或 XML 模式进行验证。
#### 4. 使用 XmlTextReader 类读取 XML
`XmlTextReader` 类的使用步骤如下:
1. 创建类的实例,将需要读取的 XML 文件的名称传递给构造函数。
2. 设置一个循环,反复调用 `Read()` 方法,该方法从文件的第一个节点开始,依次读取所有剩余节点,当有节点可读时返回 `True`,到达文件末尾时返回 `False`。
3. 在循环中,检查 `XmlTextReader` 对象的属性,以获取当前节点的信息(类型、名称、数据等)。
4. 循环直到 `Read()` 方法返回 `False`。
以下是 `XmlTextReader` 类常用属性和方法的说明:
| 属性 | 描述 |
| ---- | ---- |
| AttributeCount | 返回当前节点的属性数量 |
| Depth | 返回当前节点的深度(嵌套级别) |
| EOF | 如果 `XmlTextReader` 位于文件末尾,则返回 `True`,否则返回 `False` |
| HasAttributes | 如果当前节点有属性,则返回 `True` |
| HasValue | 如果当前节点可以有值,则返回 `True` |
| IsEmptyElement | 如果当前节点是一个空元素,则返回 `True` |
| Item | 返回属性的值 |
| LocalName | 返回当前节点的名称,不包含任何命名空间前缀 |
| Name | 返回当前节点的名称,包含任何命名空间前缀 |
| NodeType | 返回一个 `XmlNodeType`,标识当前节点的类型 |
| Value | 返回当前节点的值 |
| 方法 | 描述 |
| ---- | ---- |
| Close() | 关闭 XML 文件并重新初始化读取器 |
| GetAttribute(att) | 获取属性的值,`att` 可以是属性的位置编号或属性名称 |
| IsStartElement() | 如果当前节点是开始元素或空元素,则返回 `True` |
| MoveToAttribute(Att) | 移动到指定的属性,`Att` 可以是属性的位置编号或属性名称 |
| MoveToElement() | 移动到包含当前属性的元素 |
| MoveToFirstAttribute() | 移动到第一个属性 |
| MoveToNextAttribute() | 移动到下一个属性 |
| Read() | 从 XML 文件中读取下一个节点,成功时返回 `True`,没有更多节点可读时返回 `False` |
`NodeType` 属性返回的 `XmlNodeType` 值的含义如下:
| 值 | 含义 |
| ---- | ---- |
| Attribute | 一个属性 |
| CDATA | 一个 CDATA 部分 |
| Comment | 一个注释 |
| Document | 文档节点(根元素) |
| DocumentType | 一个 DOCTYPE 元素 |
| Element | 元素的开始(开始标签) |
| EndElement | 元素的结束(结束标签) |
| EntityReference | 一个实体引用 |
| ProcessingInstruction | 一个 XML 处理指令 |
| Text | 元素的文本内容 |
| XmlDeclaration | XML 声明元素 |
在使用 `XmlTextReader` 类处理 XML 文件时,需要注意节点的读取方式。一个元素的开始标签、数据和结束标签是分别作为不同的节点读取的,并且属性不被视为节点。当处理 XML 时,可能会出现各种异常,如 XML 语法错误会引发 `System.Xml.XmlException` 异常,可通过捕获该异常来处理 XML 解析错误,同时捕获其他异常来处理其他类型的错误。
以下是使用 `XmlTextReader` 类的示例代码:
```vb
Dim rdr As XmlTextReader
Dim buf As New StringBuilder()
Try
rdr = New XmlTextReader("checkbook.xml")
While rdr.Read()
' Look for the start node.
If rdr.NodeType = XmlNodeType.Element Then
' Is it a "check" element?
If rdr.Name = "check" Then
buf.Append(rdr.GetAttribute("date") _
& vbCrLf)
End If
End If
End While
Catch ex As System.Xml.XmlException
MsgBox("Xml error " & ex.Message)
Catch ex As Exception
MsgBox("General error " & ex.Message)
Finally
If Not rdr Is Nothing Then rdr.Close()
End Try
```
该代码读取 `checkbook.xml` 文件,查找 `<check>` 元素,并将每个 `<check>` 元素的 `date` 属性值连接起来。
#### 5. 使用 XmlValidatingReader 类验证 XML
要使用 `XmlValidatingReader` 类对 XML 文件进行验证,可按以下步骤操作:
1. 创建一个 `XmlTextReader` 类的实例,连接到 XML 文件。
2. 创建一个 `XmlValidatingReader` 类的实例,并将步骤 1 中创建的 `XmlTextReader` 类的引用传递给它。
3. 创建一个事件处理程序来处理验证错误。
4. 设置 `XmlValidatingReader` 对象的 `ValidationType` 和 `ValidationEventHandler` 属性。
5. 如果要根据外部 XML 或 XDR 模式进行验证,设置 `Schemas` 属性
0
0
相关推荐









