
4.4 使用DOMDocument读写XML
既然XML文件是文本文件,那么当然可以用文本文件读写的方式对XML文件进行存取。微软提供了专门针对XML的对象模型DOM(Document Object Model),可以对XML进行全面操作。
4.4.1 引入DOMDocument对象
前期绑定:在VBA工程中添加引用“Microsoft XML, v 6.0”,如图4-6所示。

图4-6 添加外部引用
添加该外部引用后,代码中使用
Dim Doc As MSXML2.DOMDocument
就声明了一个对象变量。
后期创建DOMDocument对象如下。
Set Doc = CreateObject("MSXML2.DOMDocument")
下面分别讲述把各种来源的XML载入DOMDocument的方法。
4.4.2 装载本地文件
使用DOMDocument对象的Load函数,可以把本地XML文件装载到DOM对象模型中。
语法如下。
Load(xmlSource)
参数xmlSource是指XML文件的路径,如果装载成功,Load函数返回True。
下面的过程装载本地XML文件,并在立即窗口打印文档对象的XML代码。

代码分析:无论是DOMDocument,还是其他的各种节点,几乎都有一个XML属性,该属性返回的是对象的XML代码字符串。因此可以通过调用该属性来查看节点的情况。
4.4.3 装载网络文件
很多情况下,XML文件是网络上的一个远程文件,此时可以使用XMLhttp对象通过URL请求,返回一个responseXML,然后赋给DOMDocument对象即可。
下面的代码从w3school网站上获取一个XML文件,然后装载到程序中的DOMDocument对象中。

运行上述代码,立即窗口打印出XML文件的源代码。
4.4.4 装载字符串
除了使用Load函数装载文件外,还可以使用LoadXML函数直接装载程序中的字符串。
下面的过程把程序中的字符串装载到DOMDocument中。

代码分析:如果变量code中的字符串不符合XML的语法规则,会弹出“你的代码不合法,装载失败!”的警告对话框。
上述过程运行后,立即窗口显示的运行结果如图4-7所示。
注意,创建XML的字符串中,表示元素的属性值时,可以用单引号代替双引号。

图4-7 XML文档装载字符串
4.4.5 保存XML文件
不管是从哪一个来源装载的DOMDocument,随时都可以使用DOMDocument对象的Save方法保存为本地XML文件。用法如下。
DOC.Save "C:\build\temp.xml"
其中DOC就是一个DOMDocument对象,运行上述语句,会在指定路径下生成一个XML文件。