lire des fichiers xml dans vb6

je sais qu'il est plus facile de lire des fichiers xml vb.net mais comme notre application est toujours sur vb6, j'ai besoin d'un travail. mais de toute façon, je suis coincé. de plus, je n'ai aucun contrôle sur le fichier xml puisqu'il est généré à partir d'une autre application. Le code court du fichier xml est ci-dessous,

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

si le fichier XML avait été dans un format comme celui-ci, j'aurais pu le lire facilement.

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

Mais depuis le fichier xml généré n'est pas en mon pouvoir, je suis coincé depuis quelques heures maintenant.

je dois lire les paires nom-valeur de ce fichier xml. comment puis-je faire avec cela?

s'il vous plaît aider.

17
demandé sur Ubaid 2010-10-06 12:01:41

4 réponses

Vous pouvez le faire avec MSXML, qui offre des fonctionnalités similaires à celles de certains API XML. Je n'ai pas de copie de VB6 pour le moment, mais c'est assez facile. Tout d'abord, ajouter une référence à MSXML de votre projet VB6. Vous feriez alors quelque chose comme ceci:

  • Créer une instance de MSXML2.DOMDocument
  • appelez le Charger méthode pour analyser le fichier XML
  • appelez le selectNodes("/Report/Categories/Category"). Ceci renvoie un IXMLDOMNodeList objet.
  • vous pouvez alors boucler la boucle à travers la liste des Noeuds en récupérant chaque IXMLDOMNode par item ou nextNode.
  • vous pouvez alors obtenir le name et valueattributes propriété du XMLDOMNode ou en utilisant selectSingleNode("@name").Text et selectSingleNode("@value").Text

MSXML est assez flexible, il y a donc une syntaxe encore plus courte que vous pouvez utiliser, mais la de travailler pour vous. Si vous ne l'avez pas déjà compris, je posterai le code quand je me rendrai sur une machine avec VB6 installé.

UDPATE:

voici un exemple de travail utilisant L'échantillon XML que vous avez fourni.

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
25
répondu Garett 2010-10-06 15:53:04

Utiliser MSXML comme conseillé dans cette question (et dans l'article lié par Ardman).

Vous pouvez utiliser IXMLDOMElement.getAttributeNode pour lire les attributs.

Par exemple ce code ci-dessous lit le livres d'échantillons.fichier xml à partir de MSDN et accède à un attribut. Vous avez besoin d'une référence à une version de 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
2
répondu MarkJ 2017-05-23 12:22:45

vous pouvez utiliser XSLT pour transformer le XML de cette structure en paire de valeurs

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

0
répondu Iain 2010-10-06 08:14:01

Merci, ces questions et ces réponses m'ont beaucoup aidé. m'a fallu 2 jours pour comprendre comment

    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
0
répondu Lovsan 2018-05-17 17:39:08