在 vb6 中读取 xml 文件
Posted
技术标签:
【中文标题】在 vb6 中读取 xml 文件【英文标题】:reading xml files in vb6 【发布时间】:2010-10-06 08:01:41 【问题描述】:我知道在 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 文件中读取 NAME-VALUE 对。我该怎么做?
请帮忙。
【问题讨论】:
【参考方案1】:您可以使用MSXML 来完成此操作,它提供与某些 .NET XML API 类似的功能。我现在没有 VB6 的副本,但这很容易。首先,从您的 VB6 项目中添加对 MSXML 的引用。然后,您将执行以下操作:
创建MSXML2.DOMDocument 的实例 调用Load方法解析XML文件 致电selectNodes("/Report/Categories/Category")
。这将返回一个 IXMLDOMNodeList 对象。
然后您可以遍历节点列表,通过item 或nextNode 检索每个IXMLDOMNode。
然后您可以使用 XMLDOMNode 的 attributes
属性或使用 selectSingleNode("@name").Text
和 selectSingleNode("@value").Text
获取 name
和 value
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】:按照此问题(以及 Ardman 链接的文章)中的建议使用 MSXML。
您可以使用IXMLDOMElement.getAttributeNode 来读取属性。
例如,下面的代码从 MSDN 读取 sample books.xml file 并访问一个属性。您需要对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】:您可以使用 XSLT 将 XML 从这种结构转换为值对
http://www.xmlfiles.com/articles/sample_chapters/sams_xmlforaspnet/default.asp
【讨论】:
【参考方案4】:谢谢,这个问题的答案对我帮助很大。我花了 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
【讨论】:
如果您在发布代码作为答案时至少能解释一下您的代码会更好。 对不起,我的错,我从 url 获取 xml 文件并从中存储一些数据以供以后使用,我在访问以上是关于在 vb6 中读取 xml 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用vb6通过MSFlexigrid将XML数据导入SQL表