1

我是 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

问题是无法使用IXmlDomNode类型的参数node调用printNode。当我尝试运行程序时,我总是得到一个运行时错误 438,它说对象不支持这个函数

节点确实存在,我对此进行了测试,可以打印节点的名称和值。

谁能解释我的原因并提示我如何解决这个问题?

4

1 回答 1

3

您的代码中有语法错误。如果您正在调用 Sub,您可以在不将参数括在括号中的情况下进行调用,或者在 Sub 名称前使用 Call 关键字。

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
于 2016-09-19T17:51:16.620 回答