Excel VBA读取嵌套XML节点求助:无法遍历Level2/Level3节点
VBA提取XML中Level2下Level3节点id属性的问题排查与修正
代码中的核心问题
- 重复定义变量:
XMLSN2被同时定义为IXMLDOMElement和IXMLDOMNode,触发编译错误,导致代码无法正常执行。 - 错误调用节点列表的属性方法:循环中使用
XMLSNL1.getAttribute(id)是错误的,XMLSNL1是节点列表(IXMLDOMNodeList),没有getAttribute方法,需用循环变量XMLSE1(单个节点)调用该方法。 - 属性名未加引号:
id未用双引号包裹,VBA会将其视为未定义变量,正确写法应为"id"。
修正后的代码(先验证Level2属性获取)
Sub Stuff() Dim XMLFileName As String Dim oXMLFile As New MSXML2.DOMDocument60 Dim XMLSNL1 As IXMLDOMNodeList Dim XMLSE1 As IXMLDOMElement Dim TempStr As String ' 替换为你的XML文件实际路径 XMLFileName = "C:\YourFilePath\YourXMLFile.xml" oXMLFile.async = False oXMLFile.validateOnParse = False ' 检查XML加载是否成功 If Not oXMLFile.Load(XMLFileName) Then MsgBox "XML加载失败:" & oXMLFile.parseError.reason Exit Sub End If Set XMLSNL1 = oXMLFile.SelectNodes("//Level1/Level2") ' 遍历Level2节点并获取id属性 For Each XMLSE1 In XMLSNL1 TempStr = XMLSE1.getAttribute("id") Debug.Print "Level2 ID: " & TempStr ' 输出到立即窗口查看结果 Next End Sub
扩展到提取每个Level2下的Level3节点id
如果要获取每个Level2对应的所有Level3节点id,可在遍历Level2时,针对单个Level2节点查询其子节点Level3:
Sub ExtractLevel3Ids() Dim XMLFileName As String Dim oXMLFile As New MSXML2.DOMDocument60 Dim level2Nodes As IXMLDOMNodeList Dim level2Node As IXMLDOMElement Dim level3Nodes As IXMLDOMNodeList Dim level3Node As IXMLDOMElement Dim rowNum As Integer ' 写入表格的起始行号 XMLFileName = "C:\YourFilePath\YourXMLFile.xml" oXMLFile.async = False oXMLFile.validateOnParse = False If Not oXMLFile.Load(XMLFileName) Then MsgBox "XML加载失败:" & oXMLFile.parseError.reason Exit Sub End If Set level2Nodes = oXMLFile.SelectNodes("//Level1/Level2") rowNum = 1 ' 从表格第一行开始写入 For Each level2Node In level2Nodes ' 获取当前Level2节点下的所有Level3子节点 Set level3Nodes = level2Node.SelectNodes("./Level3") For Each level3Node In level3Nodes ' 将Level3的id写入Sheet1的A列(可根据需求修改位置) Sheet1.Cells(rowNum, 1).Value = level3Node.getAttribute("id") rowNum = rowNum + 1 Next Next End Sub
内容的提问来源于stack exchange,提问作者R West
相关产品推荐
相关产品推荐

