位置:首页 > 软件操作教程 > 办公软件 > Excel > 问题详情

XML文档元素的遍历、添加和删除操作

提问人:周丽平发布时间:2021-07-24

1、启动Excel并创建一个新文档,打开Visual Basic编辑器,创建一个模块,在模块的“代码”窗口中输入如下代码。按F5键运行程序代码,在“立即窗口”中显示XML文档数据,如图1所示。

Sub GetXMLNode()

Dim xmldoc As DOMDocument

Dim nodeList As IXMLDOMNodeList

Dim node As IXMLDOMNode

Set xmldoc=New DOMDocument

xmldoc.async=False

xmldoc.Load ThisWorkbook.Path&"\学生信息.xml" '加载XML数据文档

Set nodeList=xmldoc.getElementsByTagName("学生信息") '获取学生信息节点序列

For Each node In nodeList '遍历节点序列中所有节点

Debug.Print node.XML '输出当前节点的XML字符串

Next

Set node=Nothing

Set nodeList=Nothing

Set xmldoc=Nothing

End Sub

image.png

图1 在“立即窗口”中显示XML文档数据

2、在“代码”窗口中继续输入如下程序代码。运行程序代码,在“立即窗口”中可以看到程序运行的结果。此时,学生信息节点都添加了“入学日期”节点项,如图2所示。程序在当前Excel文档相同的文件夹中生成名为“学生信息New.xml”的文件,其中学生信息的节点添加了相应的“入学日期”节点项,并且这些节点都以当前时间作为初始设置数据,如图3所示。

Sub AddElement()

Dim xmldoc As DOMDocument

Dim node As IXMLDOMNode

Dim rootNode As IXMLDOMNode

Dim newNode As IXMLDOMNode

Dim rtnnode As IXMLDOMNode

Set xmldoc=New DOMDocument

xmldoc.Load ThisWorkbook.Path&"\学生信息.xml" '加载XML数据文档

Set rootNode=xmldoc.DocumentElement '获取文档根节点

For Each node In rootNode.ChildNodes '遍历根节点所有学生信息子节点

Set newNode=xmldoc.createElement("入学日期") '创建"入学日期"元素节点

Set rtnnode=node.appendChild(newNode) '将新节点插入到当前学生信息节点

rtnnode.Text=Format(Now,"yyyy-mm-dd") '设置当前插入节点的文本信息

Debug.Print node.XML '输出当前学生信息节点的XML字符串

Next

On Error Resume Next

Kill ThisWorkbook.Path&"\学生信息New.xml" '删除临时文档

On Error GoTo 0

xmldoc.Save ThisWorkbook.Path&"\学生信息New.xml" '保存XML文档

Set node=Nothing

Set xmldoc=Nothing

End Sub

image.png

图2 “立即窗口”中显示的程序运行结果

image.png

图3 XML文档中添加了新的节点项

提示

程序使用For...Each In结构遍历XML文档的所有节点,使用节点对象的AppendChild方法来实现节点的添加。在默认情况下,AppendChild方法将新建立的节点插入到父节点中最后一个子节点之后。如果需要将节点插入到其他节点之前,则需要使用InsertBefore方法。该方法除了接受节点对象参数外,还接受目标节点对象,插入节点将位于该目标节点之前。

3、在“代码”窗口中输入如下代码。运行程序代码,在“立即窗口”中显示程序运行结果。这里,“入学日期”节点项已经被移除,如图4所示。打开“学生信息New.xml”文件,可以查看到删除XML文档元素后的文档内容,如图5所示。

Sub DeleteElement()

Dim xmldoc As DOMDocument

Dim node As IXMLDOMNode,rootNode As IXMLDOMNode

Set xmldoc=New DOMDocument

xmldoc.Load ThisWorkbook.Path&"\学生信息New.xml" '加载XML数据文档

Set rootNode=xmldoc.DocumentElement '获取根节点

For Each node In rootNode.ChildNodes '遍历所有"学生信息"

node.RemoveChild node.ChildNodes(node.ChildNodes.Length-1) '移除"入学日期"节点

Debug.Print node.XML '输出节点的XML字符串

Next

On Error Resume Next

Kill ThisWorkbook.Path&"\学生信息New.xml" '删除临时文档

On Error GoTo 0

xmldoc.Save ThisWorkbook.Path&"\学生信息New.xml" '重新保存文档

Set node=Nothing

Set xmldoc=Nothing

End Sub

image.png

图4 “立即窗口”中显示程序运行结果

image.png

图5 XML文档中的数据结构

提示

程序中使用RemoveChild方法将“入学日期”节点项从XML文档中移除。

继续查找其他问题的答案?

回复(0)
返回顶部