代码之家  ›  专栏  ›  技术社区  ›  Ubaid

在VB6中读取XML文件

  •  17
  • Ubaid  · 技术社区  · 14 年前

    我知道在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>
    

    如果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>
    

    但是,由于生成的XML文件不在我的控制范围内,所以我在几个小时后就陷入了困境。

    我需要从这个XML文件中读取名称-值对。我该怎么办?

    请帮忙。

    4 回复  |  直到 6 年前
        1
  •  25
  •   Garett    14 年前

    你可以用 MSXML 它提供与某些.NET XML API类似的功能。我现在没有vb6的拷贝,但很容易。首先,添加对的引用 MSXML 从您的vb6项目。然后您将执行如下操作:

    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
    
        2
  •  2
  •   Community uzul    7 年前

    使用 MSXML 正如在这个问题中(以及在阿尔德曼链接的文章中)所建议的那样。

    你可以使用 IXMLDOMElement.getAttributeNode 读取属性。

    例如,下面的代码读取 sample books.xml file 从msdn访问属性。你需要参考一下 a version of Microsoft XML .

    Private Sub Form_Load()
    Dim xmlDoc As New MSXML2.DOMDocument30
    Dim nodeBook As IXMLDOMElement
    Dim nodeId As IXMLDOMAttribute
    Dim sIdValue As String
    xmlDoc.async = False
    xmlDoc.Load App.Path & "\books.xml"
    If (xmlDoc.parseError.errorCode <> 0) Then
       Dim myErr
       Set myErr = xmlDoc.parseError
       MsgBox ("You have error " & myErr.reason)
    Else
       Set nodeBook = xmlDoc.selectSingleNode("//book")
       Set nodeId = nodeBook.getAttributeNode("id")
       sIdValue = nodeId.xml
       MsgBox sIdValue
    End If
    
    End Sub
    
        3
  •  0
  •   Iain    14 年前

    您可以使用XSLT将XML从这个结构转换为值对。

    http://www.xmlfiles.com/articles/sample_chapters/sams_xmlforaspnet/default.asp

        4
  •  0
  •   Lovsan    6 年前

    谢谢,这些问题对我帮助很大。我花了2天的时间想办法

        Set xmlDoc = CreateObject("Msxml2.DOMDocument")
    
    Dim nodeBook
    Dim nodeId
    xmlDoc.async = False
    xmlDoc.Load ("xmlfile url")
    If (xmlDoc.parseError.errorCode <> 0) Then
       Dim myErr
       Set myErr = xmlDoc.parseError
       MsgBox ("You have error " & myErr.reason)
    Else
       Set nodeBook = xmlDoc.selectSingleNode("//Program")
       Set nodeId = nodeBook.getAttributeNode("description")
       wscript.Echo nodeId.value
    End If