Office VBA开发经典:中级进阶卷
上QQ阅读APP看书,第一时间看更新

4.1 XML构成

一个典型的XML文件一般由处理指令(XML声明)、节点树(NodeTree)和一些必要的注释(Comments)构成。

图4-1所示是一个典型的XML文件(文件名为“西南省份.xml”)用NotePad++打开后的效果。

第1行是该XML文件的处理指令。

在第2行和第4行中,<!--与-->包起来的部分是注释。

其余各行用<>包起来的部分就是XML中的标签,也就是元素节点。

该文件描述的是中国西南各省的首府城市、各省人口总数这些信息。

XML文档模型中,处理指令、注释、元素、文本内容等都属于XML的节点,换句话说,图中的17行,每行都是节点(Node)。

上述XML文件如果用Treeview控件绘制一个示意图,将会是如图4-2所示的样子。

图4-1 “西南省份.xml”源文件

图4-2 XML文件结构示意图

可以看出,该XML的根元素节点是Country,它下面管辖3个Province元素节点,每个Province下面有Capital和Population元素节点。

XML可以包含很多种类型的节点,下面分别介绍最常见的节点类型。

4.1.1 元素节点

元素(Element)节点,是XML文件的骨架,处在数据存储的核心位置。与HTML语言中的标签类似,元素节点必须用标签符号括起来。

元素节点必须指定元素的名称,例如<Staff></Staff>就构成了一个完整的元素节点,这个元素的名称是Staff。一般情况下,一个元素节点由开始标签和结束标签形成一个闭合环境。例如:

    <Staff>
    ……Something……
    </Staff>

也就是说,如果在XML文件的某个位置出现了<Staff>,在其后面一定有个</Staff>与其呼应,这个结束标签的作用表示该标签就这么大一个作用范围。

元素节点可以包含文本内容、注释、子节点等,也可以什么都不包含。

例如,下面的XML代码段中,Staff元素节点下面包含一个子元素节点:张三、一个文本内容节点(内容是:技术部),还包含一个注释节点(内容是:部分员工)。

这里可以得出一个结论:元素节点可以是其他节点的父节点,同时自身也可以是其他节点的子节点。

需要注意的是,如果某元素节点下面没有包含任何子节点,其结束标签可以合并到开始标签中。例如前面的张三元素节点没包含任何子节点,两行可以合并为<张三/>,如下所示。

这种元素节点的合并方式通常用于末梢元素中。

4.1.2 元素的属性

一个元素节点,可以规定若干属性(attributes),每个属性都由属性名称和属性值组成。属性与属性之间由一个以上的空格隔开。无论是任何类型的属性值,都必须用引号括起来。

元素属性的语法格式如下。

    <元素名称 属性1="value1" 属性2="value2">

一个元素的所有属性用空格隔开,并且这些属性一定和元素的开始标签放在同一个<>里面。例如下面这句。

    <Population Unit="万人">8204</Population>

这个元素节点Population有1个属性,属性名是Unit,属性值是“万人”。比较容易混淆的是元素的属性和元素的内容节点,元素的属性一定放在元素的开始标签中,而文本内容通常是夹在元素的开始标签与结束标签之间,例如,本例中的数字8204就是元素Population的一个子节点,元素的文本内容不需要加引号。

元素的属性值既可以用双引号括起来,也可以用单引号括起来。

4.1.3 节点关系

要学好XML,首先,学会判断节点的类型和作用;其次,关注节点之间的关系。XML的节点树看起来错综复杂,实际上,节点和节点之间就两种关系:所属关系(父子关系,Parent-Child)与并列关系(兄弟关系,Sibling)。正是因为所属关系和并列关系的存在,才形成了节点树。

如果以“西南省份.xml”为例,Country根元素节点与各个Province都是父子关系,而Province之间是兄弟关系。同一个Province里面的Capital和Population之间也是兄弟关系。

4.1.4 文本节点

文本节点(TextNode)一般是指位于元素节点的起始标签与结束标签之间的文本内容。下面的XML描述了两种早餐的名称、价格、详细信息和能量。

例如,<name>French Toast</name>中的“French Toast”就是一个文本节点,该节点是<name>元素节点的子节点。同理,“$4.50”这个文本节点的父节点是<price>元素节点。

4.1.5 注释节点

XML中的注释(Comment)内容要放在<!--与-->之间,一条注释也构成了一个节点。

例如,上述XML中的<!--This is my favorite food-->是一个注释节点,其父节点是<food>元素节点。兄弟节点有<name>、<price>等元素节点。

4.1.6 处理指令节点

处理指令(Processing Instruction)一般书写于XML最顶端、根元素节点上方的部分。

如图4-1所示,顶部的<?xml version="1.0" encoding="utf-8"?>就是处理指令节点,里面包含了XML的版本、编码方式等信息。

处理指令节点是文档(DOMDocument)的子节点,与根元素(DocumentElement)节点是兄弟关系。