2010-10-06 36 views
17

Tôi biết dễ đọc hơn các tệp xml trong vb.net nhưng vì ứng dụng của chúng tôi vẫn còn trên vb6, tôi cần một công việc xung quanh. nhưng bằng cách nào đó, tôi bị mắc kẹt. tôi cũng không có quyền kiểm soát tập tin xml vì nó đang được tạo ra từ một ứng dụng khác. Mã ngắn từ tệp xml dưới đây,đọc các tệp xml trong vb6

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

Nếu tệp XML có định dạng như thế này, tôi đã có thể đọc dễ dàng.

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

Nhưng kể từ khi tệp xml được tạo không nằm trong tầm kiểm soát của tôi, tôi đã tạm dừng vấn đề này từ vài giờ.

tôi cần đọc các cặp NAME-VALUE từ tệp xml này. làm thế nào để tôi đi về với điều này?

vui lòng trợ giúp.

Trả lời

24

Bạn có thể làm điều đó với MSXML, cung cấp chức năng tương tự như một số API XML của .NET. Tôi không có một bản sao của VB6 ngay bây giờ, nhưng nó khá dễ dàng. Đầu tiên, thêm một tham chiếu đến MSXML từ dự án VB6 của bạn. Sau đó bạn sẽ làm điều gì đó như sau:

  • Tạo một thể hiện của MSXML2.DOMDocument
  • Gọi phương pháp Load để phân tích các tập tin XML
  • Gọi selectNodes("/Report/Categories/Category"). Điều này sẽ trả lại đối tượng IXMLDOMNodeList.
  • Sau đó, bạn có thể lặp qua danh sách nút truy xuất từng số IXMLDOMNode qua item hoặc nextNode.
  • Sau đó bạn có thể nhận được namevalue sử dụng attributes tài sản của XMLDOMNode hoặc sử dụng selectSingleNode("@name").TextselectSingleNode("@value").Text

MSXML là khá linh hoạt, do đó, cú pháp thậm chí ngắn hơn mà bạn có thể sử dụng, nhưng ở trên nên làm việc cho bạn. Nếu bạn chưa tìm ra nó, tôi sẽ đăng mã khi tôi đến một máy tính đã cài đặt VB6.

UDPATE:

Dưới đây là một ví dụ làm việc bằng cách sử dụng mẫu XML mà bạn cung cấp.

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

Sử dụng MSXML như khuyên trong câu hỏi này (và trong bài viết được liên kết bởi Ardman).

Bạn có thể sử dụng IXMLDOMElement.getAttributeNode để đọc thuộc tính.

Ví dụ: mã này dưới đây đọc số sample books.xml file từ MSDN và truy cập thuộc tính. Bạn cần tham chiếu đến 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 
Các vấn đề liên quan