1 pièce(s) jointe(s)
Import XML (attribute-centric) volumineux avec VBA
Bonjour,
j'ai feuilleté les différents tutos permettant d'importer des fichiers XML notamment celui ci:
http://arkham46.developpez.com/artic...ge=page_4#L5-B
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 'Voir arborescence du fichier
Function ReadXMLFileXMLIndent()
Dim oXML As MSXML2.DOMDocument
Dim oNode As MSXML2.IXMLDOMNode
Set oXML = New MSXML2.DOMDocument
oXML.async = False
oXML.Load "C:\****\exportbis.xml"
For Each oNode In oXML.DocumentElement.ChildNodes
Debug.Print oNode.BaseName
Next
End Function |
j'ai un message comme quoi la variable objet n'est pas définie. comme je débute dans ce type de traitement je ne comprends pas d'où vient le problème d'autant que j'ai chargé la référence Microsoft XML 6.:calim2:
Du coup j'ai essayé le code source ci-dessous (trouvé sur http://www.access-programmers.co.uk/...d.php?t=213209) avec le fichier xml en pièce jointe ici Pièce jointe 216056
en testant dans ma base Access aucun message d'erreurs (j'ai aussi compiler mon projet vba) mais aucun import de données non plus dans la table :weird:
j'ai vérifié les liens des fichiers et le nom des variables, des champs et des tables pourtant et je suis (presque) sur que c'est correct.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| 'Importer des fichiers XML dans Access lorsque ceux ci utilisent des attribut.
Public Sub ImportXML2()
Dim xmlDoc As MSXML2.DOMDocument
Dim franchiseNode As MSXML2.IXMLDOMNode
Dim playerNode As MSXML2.IXMLDOMNode
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("rosters")
Set xmlDoc = New MSXML2.DOMDocument
With xmlDoc
.Load "C:\***\export.xml"
If .parseError.ErrorCode <> 0 Then
MsgBox "Error loading: " & .parseError.reason
'need to exit gracefully here
End If
For Each franchiseNode In .FirstChild.ChildNodes
For Each playerNode In franchiseNode.ChildNodes
rs.AddNew
rs!franchise = franchiseNode.Attributes.getNamedItem("id").Text
rs!player = playerNode.Attributes.getNamedItem("id").Text
rs!Status = playerNode.Attributes.getNamedItem("status").Text
rs.Update
Next playerNode
Next franchiseNode
End With
Set xmlDoc = Nothing
Set franchiseNode = Nothing
Set playerNode = Nothing
Set rs = Nothing
End Sub |
en mettant des debug.print un peu partout j'ai l'impression que la boucle ne marche pas ou que la fonction ne trouve pas les noeuds. :traine:
J'ai du passé à côté de quelque chose mais je ne vois pas quoi... je n'en suis qu'à des traitements simples alors que ce que je cherche à faire est beaucoup plus complexe.:aie: Donc si quelqu'un pouvait me mettre sur la voie en me fournissant une base de travail toute faite avec un fichier xml (possédant plusieurs attributs différents pour chaque noeud) et un code source simple qui fonctionne ça m'arrangerait pour la suite qui s'avère plus compliqué.
Petite précision pour la suite : le fichier xml que je souhaite importer fait 110 mo et comporte 2 600 000 de lignes (je ne m'intéresserait qu'à certaines informations à l'intérieur mais ça va représenter un gros volume de données...) donc si vous avez des suggestions pour éviter que les traitements prennent trop longtemps je suis preneur car l'optimisation de code et moi ça fait deux :pastaper:
un grand merci d'avance à celui qui me sortira du pétrin