На самом деле не очень люблю публиковать ответы, которые я не могу проверить, но здесь идет.
В вашей топовой версии вы используете прямой XML-ответ без помощи парсера XML. Эта ссылка описывает вашу ошибку следующим образом:
Причина
Когда вы смешиваете разные версии объектов MSXML DOM в DOM
вызов метода объекта, объект из другой версии
синтаксический анализатор, который предоставляется как обязательный параметр метода, рассматривается как
иностранный объект.
Разрешение
Ссылка и использование объектов, реализованных в одной версии синтаксического анализатора MSXML. Не> смешивайте разные версии объектов DOM при программировании DOM MSXML.
Таким образом, при использовании direct, возможно, вы имеете дело с объектом, реализованным другой версией синтаксического анализатора MSXML.
Я думал, что вам всегда нужно было проанализировать ответ на стороне клиента XML-анализатора, прежде чем исследовать DOM. Это позволяет вам указать / контролировать версию парсера во всем вашем коде. Это также позволяет вам validateOnParse
и гарантировать, что xPath может использоваться для поиска элементов DOM.
Я не могу проверить, но может быть что-то вроде следующего?
Option Explicit
Public Sub HandleXML()
Dim sURL As String, Http As Object, xgetCSS As New MSXML2.DOMDocument60
Dim xDoc As New MSXML2.DOMDocument60, xMember As MSXML2.IXMLDOMElement
Dim nodes As MSXML2.IXMLDOMNodeList, node As MSXML2.IXMLDOMElement
Set Http = CreateObject("MSXML2.SERVERXMLHTTP")
With Http
.Open "Post", sURL, False
.send xgetCSS.XML
End With
With xDoc
.validateOnParse = True
.setProperty "SelectionLanguage", "XPath"
.async = False
If Not .LoadXML(Http.responseText) Then '<==Not sure if you need Http.responseXML here as can't test
Err.Raise .parseError.ErrorCode, , .parseError.reason
Exit Sub
End If
End With
Set nodes = xDoc.SelectNodes("//return/css/members/member")
For Each xMember In nodes
node.appendChild xMember
Next
End Sub
Некоторая информация Microsoft о XML Dom .