如何在Excelmacros中处理缺less的xml节点

我使用ms excel写入vb中的macros。 我正在阅读XML文件,循环和less数节点丢失。 请参阅下面的xml示例:

<document> <element> <fname></fname> <age></age> </element> <element> <fname></fname> </element> </document> 

由于某种原因,如果年龄=没有然后不工作。 设置年龄线上的“对象不支持属性或方法”。 看到我下面的macros代码示例。

 Sub TestXML() Dim mainWorkBook As Workbook Set mainWorkBook = ActiveWorkbook mainWorkBook.Sheets("Sheet1").Range("A:E").Clear Dim XDoc As Object Set XDoc = CreateObject("MSXML2.DOMDocument") XDoc.async = False XDoc.validateOnParse = False XDoc.Load ("C:\MyUnzipFolder\XML_test.XML") Set fname= XDoc.SelectNodes("/Document/element/fname/text()") Set age = XDoc.SelectNodes("/Document/element/age/") If age Is Nothing Then MsgBox ("element not found.") Else MsgBox ("element found.") End If Set XDoc = Nothing End Sub 

以“元素/年龄”结尾并以“文档”开头的所有path:

 Dim ages As IXMLDOMSelection Set ages = XDoc.SelectNodes("/document//element/age") 

在阅读您的意见后:

 ' Add reference to Microsoft XML, v6.0 Sub TestXML() Dim XDoc As MSXML2.DOMDocument Set XDoc = New MSXML2.DOMDocument XDoc.async = False XDoc.validateOnParse = True If Not XDoc.Load("c:\MyUnzipFolder\XML_test.XML") Then MsgBox XDoc.parseError.reason, vbOKOnly, "Error " & XDoc.parseError.ErrorCode Exit Sub End If ' all paths that end in element Dim elements As IXMLDOMSelection Set elements = XDoc.SelectNodes("//element") Dim element As IXMLDOMElement Dim age As IXMLDOMElement ' loop through each element and try getting its age Dim r As Long For Each element In elements r = r + 1 Set age = element.SelectSingleNode("age") If Not age Is Nothing Then ' element has age sub element, print its text ActiveSheet.Cells(r, 1).Value = age.Text Else ' if nothing then keep cell blank ActiveSheet.Cells(r, 1).Value = "blank" End If Next element Set XDoc = Nothing End Sub 

XML_test.XML

 <?xml version="1.0" encoding="utf-8"?> <document> <element> <fname></fname> <age>10</age> </element> <element> <fname></fname> </element> <element> <age>40</age> <fname></fname> </element> <element> <fname></fname> <age>20</age> </element> <element> <fname></fname> </element> <element> <fname></fname> </element> <element> <fname></fname> </element> <element> <fname></fname> <age>30</age> </element> <element> <fname></fname> </element> </document> 

结果

在这里输入图像说明