gpt4 book ai didi

xml - 带有或带有 block 的对象变量未设置

转载 作者:行者123 更新时间:2023-12-04 21:15:10 25 4
gpt4 key购买 nike

我有我试图解析的 xml 文件:

This is the xml file content



<MYSTUFF>
<COMPANYNAMES>
<COMPANYNAME>JUMPIN (JIMMY) LIMITED</COMPANYNAME>
<COMPANYNAME>BLADE RUNNER'S TRANSPORT</COMPANYNAME>
<COMPANYNAME>P Griffiths & Sons</COMPANYNAME>
<COMPANYNAME>SOMETIMES, NEVER</COMPANYNAME>
<COMPANYNAME>MASTER/CLASS</COMPANYNAME>
</COMPANYNAMES>
<FIRSTNAMES>
<FIRSTNAME>Richard</FIRSTNAME>
<FIRSTNAME>Jo & hn</FIRSTNAME>
<FIRSTNAME>Paul</FIRSTNAME>
<FIRSTNAME>Geo, rge</FIRSTNAME>
<FIRSTNAME>Ringo</FIRSTNAME>
</FIRSTNAMES>
<LASTNAMES>
<LASTNAME>Davies'</LASTNAME>
<LASTNAME>Lennon</LASTNAME>
<LASTNAME>McCartney(3)</LASTNAME>
<LASTNAME>Harrison</LASTNAME>
<LASTNAME>St/ar</LASTNAME>
</LASTNAMES>
</MYSTUFF>

这是代码:

Dim XDoc As Object

Set XDoc = CreateObject("MSXML2.DOMDocument")
XDoc.async = False: XDoc.validateOnParse = False
XDoc.Load (ThisWorkbook.Path & "\test.xml")

'Get Document Elements
Set lists = XDoc.DocumentElement

'Traverse all elements 2 branches deep
For Each listNode In lists.ChildNodes
For Each fieldNode In listNode.ChildNodes
Debug.Print "[" & fieldNode.BaseName & "] = [" & fieldNode.Text & "]"
Next fieldNode
Next listNode

Set XDoc = Nothing

我正在获取带有或未在此行上设置 block 的对象变量:

For Each listNode In lists.ChildNodes

最佳答案

您的 XML 文件未正确加载。

a) 我想您的 XML 文件以 <?xml version="1.0" encoding="utf-8"?> 之类的开头。 ,以便可以将其识别为 XML。

b) 最好声明您的对象设置(总是在声明头中使用Option Explicit)。当您使用所谓的后期绑定(bind)时,编写如下就足够了:

Dim XDoc      As Object
Dim lists As Object
Dim listNode As Object
Dim fieldNode As Object

提示 如果您使用 Set XDoc = CreateObject("MSXML2.DOMDocument") 将 XDoc 对象设置为内存通常你得到的是旧版本(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 Griffiths & Sons 和 Jo & hn 中包含一个名为“&”的非可读字符,必须将其更改为“ &#38;”。 & 字符用作特殊字符的通用前缀,因此您不能单独包含在文件中。您可以使用以下代码测试加载,而不是简单地使用 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 网站上找到一些。

关于xml - 带有或带有 block 的对象变量未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46622752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com