Option Explicit
Sub test()
Feuil1.UsedRange.ClearContents
Dim DocXML As Object, lesOr, elements, I&, c, ChilDs, parametres, parametre, elem, DonéeParam, paramchild, e, tm
Set DocXML = GetXmlDocument("VddDiagProjects") 'remplacer customUI par le nom de la balise à nettoyer
'maintenant tu travaille sur ton document xml ici
'exemple on affiche le code
If Not DocXML Is Nothing Then
Cells(1, 1).Resize(, 4) = Array("id des OR", "Description", "Categorie", "Paramètres") 'les entetes de tableau
'ici tu peux travailler en DOM ou xpath comme tu veux
'en dom
Set lesOr = DocXML.getelementsbytagname("OR") 'selectionne toutes les balises("OR")
I = 1
For Each elements In lesOr 'on boucle sur toutes les balises
I = I + 1
c = 1
Feuil1.Cells(I, 1) = elements.getattribute("id") 'l identifient(id)
c = c + 1: Feuil1.Cells(I, c) = elements.getelementsbytagname("Description")(0).Text 'l 'enfant description de chaque balise or
c = c + 1: Feuil1.Cells(I, c) = elements.getelementsbytagname("Category")(0).Text 'enfant category de chaque balise or
'on compile les données des parametres(il peut y en avoir plusieurs)
Set parametres = elements.getelementsbytagname("Parameter")
c = 4
For e = 0 To parametres.Length - 1
Feuil1.Cells(I, c) = Feuil1.Cells(I, c) & parametres(e).getattribute("name") & ";" & parametres(e).Text & ";"
Next
Next
End If
End Sub
Function GetXmlDocument(balise_A_nettoyer) As Object
Dim xmlfile, CodEoUI, balise, apres, entre, Dc
'ouvre une boite de dialogue de selection de fichier xml
xmlfile = Application.GetOpenFilename("XML Files (*.xml), *.xml", 1, "ouvrir un fichier")
If xmlfile = False Then Exit Function
'ouverture du fichier en text
With CreateObject("ADODB.Stream")
.Type = 2: .Charset = "utf-8": .Open: .LoadFromFile xmlfile: CodEoUI = .ReadText(-1): .Close
End With
'on supprime tout les shemas
If InStr(CodEoUI, "xmlns") > 0 Then
apres = Split(CodEoUI, "<" & balise_A_nettoyer)(1)
entre = Split(apres, ">")(0)
CodEoUI = Replace(CodEoUI, entre, "")
End If
'et enfin on load le document dans un xmlDomDocument
Set Dc = CreateObject("Microsoft.XMLDOM")
With Dc
.async = False: .validateOnParse = False: .resolveExternals = False
.LoadXML CodEoUI
' si erreur xml on a la definition complete de l'erreur
If .parseError.ErrorCode <> 0 Then
MsgBox _
"Erreur XML !" & vbCrLf & vbCrLf & _
"Raison : " & .parseError.Reason & vbCrLf & _
"Ligne : " & .parseError.Line & vbCrLf & _
"Colonne : " & .parseError.LinePos & vbCrLf & vbCrLf & _
"Texte :" & vbCrLf & .parseError.SrcText, _
vbCritical, "ParseError"
Exit Function
End If
Set GetXmlDocument = Dc
End With
End Function