Как разобрать 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
Другие вопросы по тегам