Set goodBad = resp.selectSingleNode("False")
If (goodBad.hasChildNodes) Then
Ошибка 91 здесь означает, что goodBad
равно Nothing
, что означает, что selectSingleNode
не дал узла с именем False
в resp
.
Похожевам нужен узел Value
;предположительно selectSingleNode
не будет проходить через дочерние узлы / потомки, чтобы найти имя узла, которое вы дали, и этот узел <Value>
будет в пути.
Итак, выберите узел <Value>
, а затемselectSingleNode
из этого узла. Или используйте другой метод, который выполняет обход потомков, чтобы найти конкретный узел.
В любом случае методы, которые могут возвращать Nothing
, не должны всегда возвращать действительную ссылку на объект.
Если выполнение может быть разумно возобновлено без нужного вам узла, тогда вы должны принять меры против Nothing
, чтобы предотвратить совершение недопустимого вызова члена для неверной ссылки на объект:
Set goodBad = resp.selectSingleNode("False")
If Not goodBad Is Nothing Then
If (goodBad.hasChildNodes) Then
'...
End If
Else
'goodBad node doesn't exist. What now?
'...
End If
В противном случае выможно сделать предположение явным с помощью Debug.Assert
:
Set goodBad = resp.selectSingleNode("False")
Debug.Assert Not goodBad Is Nothing
If (goodBad.hasChildNodes) Then
Если утверждение не подтверждено, тогда выполнение сразу останавливается, и вы можете отлаживать и возобновлять.
Что касается сложности,это связано с жестким кодированием иерархии узлов (resp
является родителем goodBad
и т. д.) и обходом узлов по отдельности. Возможно, вы могли бы упростить все это с помощью более точно настроенных selectNodes
запросов XPath.