Как разобрать xml-файл в рекурсивном vb6
Я новичок в vb6 и должен анализировать XML-документ с другой глубиной тегов, как в следующем примере:
<start>
<b>text1</b>
<c>
<c1>
<d>text</d>
</c1>
</c>
</start>
Я использую MSXML и пытаюсь решить эту проблему рекурсивно. Мой код:
Sub1()
Set objXML = CreateObject("Msxml.DOMDocument")
objXML.async = True
objXML.Load "text.xml"
Dim nodeList As IXMLDOMNodeList
Dim node As IXMLDOMNode
Set nodeList = objXML.selectNodes("*")
For Each node In nodeList
print node.nodeName ' this works'
printNode (node) 'here is the problem explained below'
Next node
End Sub
Sub printNode(node As IXMLDOMNode)
Dim xmlNode As IXMLDOMNode
If node.hasChildNodes Then
For Each xmlNode In node.childNodes
printNode (xmlNode)
Next xmlNode
Print node.nodeName
End If
End Sub
Проблема в том, что невозможно вызвать sub printNode с узлом параметра типа IXmlDomNode. Когда я пытаюсь запустить программу, я всегда получаю runtimeerror 438, который говорит, что объект не поддерживает эту функцию
Узел существует, я проверил это и могу напечатать имя и значение узла.
Может кто-нибудь объяснить, почему и дать мне подсказку, как / решение, как я могу решить эту проблему?
1 ответ
Решение
У вас есть синтаксическая ошибка в вашем коде. Если вы вызываете Sub, вы либо делаете это, не заключая параметры в круглые скобки, либо используете ключевое слово Call перед именем Sub.
Public Sub Sub1()
Set objXML = CreateObject("Msxml.DOMDocument")
objXML.async = True
objXML.Load "text.xml"
Dim nodeList As IXMLDOMNodeList
Dim node As IXMLDOMNode
Set nodeList = objXML.selectNodes("*")
For Each node In nodeList
print node.nodeName ' this works'
Call printNode(node) 'here is the problem explained below'
Next node
End Sub
Public Sub printNode(node As IXMLDOMNode)
Dim xmlNode As IXMLDOMNode
If node.hasChildNodes Then
For Each xmlNode In node.childNodes
Call printNode(xmlNode)
Next xmlNode
Print node.nodeName
End If
End Sub