您的 XML 文件未正确加载。
a) 我想你的 XML 文件以类似的开头<?xml version="1.0" encoding="utf-8"?>
,这样就可以将其识别为 XML。
b) 最好声明您的对象设置(始终使用Option Explicit
在声明头)。当您使用所谓的后期绑定时,只需编写如下即可:
Dim XDoc As Object
Dim lists As Object
Dim listNode As Object
Dim fieldNode As Object
Hint如果您将 XDoc 对象设置到内存中Set XDoc = CreateObject("MSXML2.DOMDocument")
通常您会得到旧版本(3.0),因此在大多数情况下最好显式使用Set XDoc = CreateObject("MSXML2.DOMDocument.6.0")
相反,它会自动包含 XPath。如果没有,您应该按如下方式完成代码:
Set XDoc = CreateObject("MSXML2.DOMDocument")
XDoc.async = False: XDoc.validateOnParse = False
XDoc.setProperty "SelectionLanguage", "XPath" ' << XPath functionality
c) 您的 XML 文件未成功加载,因为它包含一个名为与号(“&”)的不可读字符P 格里菲斯父子公司 and 约翰,必须改为“&
"。&字符作为特殊字符的通用前缀,因此不能单独包含在文件中。可以使用以下代码测试加载,而不是简单地使用XDoc.Load (ThisWorkbook.Path & "\test.xml")
:
If XDoc.Load(ThisWorkbook.Path & "\test.xml") Then
MsgBox "Loaded successfully"
Else
Dim xPE As Object ' Set xPE = CreateObject("MSXML2.IXMLDOMParseError")
Dim strErrText As String
Set xPE = XDoc.parseError
With xPE
strErrText = "Load error " & .ErrorCode & " xml file " & vbCrLf & _
Replace(.URL, "file:///", "") & vbCrLf & vbCrLf & _
xPE.reason & _
"Source Text: " & .srcText & vbCrLf & vbCrLf & _
"Line No.: " & .Line & vbCrLf & _
"Line Pos.: " & .linepos & vbCrLf & _
"File Pos.: " & .filepos & vbCrLf & vbCrLf
End With
MsgBox strErrText, vbExclamation
Set xPE = Nothing
Exit Sub
End If
d) 顺便说一句,还有其他更完整的方法来循环节点(递归调用)。当然,您会在 SO 网站上找到一些。