在vb6中读取xml文件

Uba*_*aid 18 xml vb6

我知道在vb.net中读取xml文件比较容易,但由于我们的appl仍然在vb6上,我需要一个解决方法.但不知何故,我被卡住了.我也无法控制xml文件,因为它是从另一个应用程序生成的.xml文件中的简短代码如下,

    <Report>
           <Categories>
                   <Category name="CASHMAN" value="Cash Management" />
                   <Category name="IM" value="Inventory Management" />
                   <Category name="POS" value="Point of Sale" />
                   <Category name="PRODUCT" value="Product" />
           </Categories>
    </Report>
Run Code Online (Sandbox Code Playgroud)

如果XML文件是这样的格式,我本可以轻松阅读.

    <Report>
           <Categories>
                   <name>CASHMAN</name>
                   <value>Cash Management</value>
           </Categories>
           <Categories>
                   <name>IM</name>
                   <value>Inventory Management</value>
           </Categories>
           <Categories>
                   <name>POS</name>
                   <value>Point of Sale</value>
           </Categories>
           <Categories>
                   <name>PRODUCT</name>
                   <value>Product</value>
           <Categories>
    <Report>
Run Code Online (Sandbox Code Playgroud)

但是由于生成的xml文件不在我的控制范围内,因此我现在已经过了几个小时了.

我需要从这个xml文件中读取NAME-VALUE对.我该怎么做呢?

请帮忙.

Gar*_*ett 27

您可以使用MSXML来完成它,它提供与某些.NET XML API类似的功能.我现在没有VB6的副本,但它很容易.首先,从VB6项目中添加对MSXML的引用.然后,您将执行以下操作:

  • 创建MSXML2.DOMDocument的实例
  • 调用Load方法来解析XML文件
  • 打电话给selectNodes("/Report/Categories/Category").这将返回IXMLDOMNodeList对象.
  • 然后,您可以遍历节点列表检索每个IXMLDOMNode通过项目nextNode.
  • 然后,您可以获取namevalue使用attributesXMLDOMNode 的属性或使用selectSingleNode("@name").TextselectSingleNode("@value").Text

MSXML非常灵活,因此您可以使用更短的语法,但上面的内容应该适合您.如果您还没有弄清楚,我会在安装VB6的机器上发布代码.

UDPATE:

以下是使用您提供的XML示例的工作示例.

Sub ParseXmlDocument()
   Dim doc As New MSXML2.DOMDocument
   Dim success As Boolean

   success = doc.Load(App.Path & "\test.xml")
   If success = False Then
      MsgBox doc.parseError.reason
   Else
      Dim nodeList As MSXML2.IXMLDOMNodeList

      Set nodeList = doc.selectNodes("/Report/Categories/Category")

      If Not nodeList Is Nothing Then
         Dim node As MSXML2.IXMLDOMNode
         Dim name As String
         Dim value As String

         For Each node In nodeList
            ' Could also do node.attributes.getNamedItem("name").text
            name = node.selectSingleNode("@name").Text
            value = node.selectSingleNode("@value").Text
         Next node
      End If
   End If
End Sub
Run Code Online (Sandbox Code Playgroud)