Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vb6中读取xml文件_Xml_Vb6 - Fatal编程技术网

在vb6中读取xml文件

在vb6中读取xml文件,xml,vb6,Xml,Vb6,我知道在vb.net中读取xml文件更容易,但由于我们的应用程序仍在vb6上,我需要一个解决方法。但不知怎么的,我被卡住了。此外,我无法控制xml文件,因为它是从另一个应用程序生成的。下面是xml文件中的简短代码 <Report> <Categories> <Category name="CASHMAN" value="Cash Management" />

我知道在vb.net中读取xml文件更容易,但由于我们的应用程序仍在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文件中读取名称-值对。我该怎么做呢


请提供帮助。

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

按照这个问题(以及Ardman链接的文章)中的建议使用

您可以使用来读取属性

例如,下面的代码从MSDN读取并访问属性。你需要一个参考资料

Private子表单_Load()
Dim xmlDoc作为新的MSXML2.DOMDocument30
将节点簿变暗为IXMLDOMELENT
作为IXMLDOMDAttribute的Dim nodeId
将值设置为字符串
xmlDoc.async=False
xmlDoc.Load App.Path&“\books.xml”
如果是(xmlDoc.parseError.errorCode 0),则
暗淡的迈尔
设置myErr=xmlDoc.parseError
MsgBox(“您有错误”&myErr.reason)
其他的
设置nodeBook=xmlDoc.selectSingleNode(//book)
Set nodeId=nodeBook.getAttributeNode(“id”)
sIdValue=nodeId.xml
MsgBox sIdValue
如果结束
端接头
您可以使用它,它提供了与某些.NET XML API类似的功能。我现在没有VB6的副本,但它很简单。首先,添加对来自VB6项目的引用。然后,您将执行以下操作:

  • 创建的实例
  • 调用该方法来解析XML文件
  • 调用
    选择节点(“/Report/Categories/Categories”)
    。这将返回一个对象
  • 然后可以通过节点列表循环检索每个via或
  • 然后可以使用XMLDOMNode的属性或使用
    selectSingleNode(@name”).Text
    selectSingleNode(@value”).Text来获取
    name
    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

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

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
Set xmlDoc=CreateObject(“Msxml2.DOMDocument”)
昏暗的笔记本
暗节
xmlDoc.async=False
Load(“xmlfileurl”)
如果是(xmlDoc.parseError.errorCode 0),则
暗淡的迈尔
设置myErr=xmlDoc.parseError
MsgBox(“您有错误”&myErr.reason)
其他的
设置nodeBook=xmlDoc.selectSingleNode(//程序)
Set nodeId=nodeBook.getAttributeNode(“说明”)
wscript.Echo nodeId.value
如果结束

在发布代码作为答案时,最好能至少解释一下您的代码。哦,对不起,我很糟糕,我从url获取了xml文件并存储了一些数据供以后使用,我在访问值时遇到了问题,例如,但能够获取刚存储在值中的数据这是我缺少的关键“getAttributeNode(”)"
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