2010-10-06 167 views
17

我知道在vb.net中讀取xml文件比較容易,但由於我們的appl仍然在vb6上,所以我需要解決。但不知何故,我卡住了。另外,我不能控制xml文件,因爲它是從另一個應用程序生成的。來自xml文件的短代碼如下,在vb6中讀取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文件中讀取名稱 - 值對。我該如何解決這個問題?

請大家幫忙。

回答

24

您可以使用MSXML,它提供與某些.NET XML API類似的功能。我現在沒有VB6的副本,但它非常簡單。首先,從您的VB6項目中添加對MSXML的引用。然後,您會做類似如下:

  • 創建MSXML2.DOMDocument
  • 調用Load方法的一個實例來解析XML文件
  • 調用selectNodes("/Report/Categories/Category")。這將返回一個IXMLDOMNodeList對象。
  • 然後,您可以遍歷節點列表,通過itemnextNode檢索每個IXMLDOMNode
  • 然後,您可以得到namevalue使用XMLDOMNode的attributes財產或使用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 
2

使用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