VBA操作Excel调用.ParentNode返回所有子节点问题求助
问题解决:获取员工对应经理登录名的正确方式
问题分析
你当前代码中login.ParentNode.Text会返回父节点下所有文本内容的拼接,这就是为什么你看到的是经理登录名加员工全部信息的原因——父节点包含了员工的所有字段(登录名、职位、入职日期等),它的Text属性会把所有子节点的文本合并输出。
解决方案
假设你的XML结构类似如下格式(包含员工节点及下属的经理登录名子节点):
<employee> <employeeLogin>employeelogin</employeeLogin> <managerLogin>managerlogin</managerLogin> <employeeTitle>Senior Engineer</employeeTitle> <employeeStartDate>2023-01-01</employeeStartDate> </employee>
修改代码,通过精准定位经理节点来获取目标内容:
Set xObj = CreateObject("MSXML2.DOMDocument") xObj.async = False xObj.validateOnParse = False xObj.Load (XMLFile) Dim list As Object Dim login As Object Dim managerNode As Object Set list = xObj.getElementsByTagName("employeeLogin") For Each login In list If login.Text <> "Not Found" Then Debug.Print login.Text ' 定位当前员工节点下的managerLogin子节点 Set managerNode = login.ParentNode.SelectSingleNode("managerLogin") If Not managerNode Is Nothing Then Debug.Print managerNode.Text Else Debug.Print "Manager Not Found" End If End If Next
关键注意点
- 禁止直接使用
ParentNode.Text,它会返回父节点下所有子节点的文本拼接结果 - 使用
SelectSingleNode精准定位目标子节点,确保只获取经理登录名 - 增加节点非空判断,避免因节点缺失引发运行错误
内容的提问来源于stack exchange,提问作者memeticlegacy
相关产品推荐
相关产品推荐

