Document XML réorganisé par attributs

Résolu
Signaler
-
 Utilisateur anonyme -
Bonjour, j'utilise la référence Microsoft XML 2.6 pour créer le document XML ci dessous (avec createElement, appendChild, setAttribute...) :

<FICHIERS>
<FICHIER nom="fichier.bmp" type="bmp" date="05/12/05 11:12" taille="12457" />
<FICHIER nom="test124.txt" type="txt" date="15/02/06 19:42" taille="454" />
<FICHIER nom="nouveau.ico" type="ico" date="14/01/06 00:54" taille="74714" />
<FICHIER nom="presentation.swf" type="swf" date="27/09/05 17:18" taille="5467207" />
</FICHIERS>

Je lis ensuite le contenu de ce fichier en passant par un :

For Each xmlFile In xmlFiles.getElementsByTagName("FICHIER")

msgbox xmlFile.getAttribute("nom")

next

Ce que je cherche à faire c'est parcourir le document comme ci dessous mais réorganisé par l'attribut "type" ou "date" ou "taille". Je ne sais pas trop comment m'y prendre...

Faut t'il lors de la création du document réorganiser ce document et si oui comment ou faut t'il lors de la lecture de chaque items preciser quelque chose pour avoir chaque items rangés par un attribut choisit.

5 réponses

Messages postés
402
Date d'inscription
vendredi 6 août 2004
Statut
Membre
Dernière intervention
12 octobre 2008
28
bonjour


Quand tu dis "selon un ordre de rangement défini" , j'interprète "par ordre croissant ou décroissant d'un attribut"
Je suis sans doute encore hors sujet , mais je tente tout de meme le coup...;o)


Cette adaptation charge dans un tableau les attributs de chaque élément .
Ensuite un tri croissant est appliqué sur une des colonnes ( l'attribut "taille" dans cet exemple )


indexColTri = 3
'0 = nom
'1 = type
'2 = date
'3 = taille



En fonction des types de données à trier , il te faudra adapter la procédure


'If CDate(Tableau(indexColTri, j)) > CDate(Tableau(indexColTri, j + 1)) Then 'synthaxe pour tri données date
If CDec(Tableau(indexColTri, j)) > CDec(Tableau(indexColTri, j + 1)) Then 'synthaxe pour tri données numériques
'If Tableau(indexColTri, j) > Tableau(indexColTri, j + 1) Then 'synthaxe pour tri données texte


Option Explicit
Option Base 0


Sub boucle_TriAttributs()
'http://www.vbfrance.com/forum.v2.aspx?ID=663224
'michelxld le 15.02.2006
'
Dim xmlDoc As DOMDocument
Dim xmlElem As IXMLDOMElement
Dim Tableau()
Dim i As Integer, j As Integer, y As Integer
Dim indexColTri As Byte
Dim t As Variant


Set xmlDoc = New DOMDocument
xmlDoc.async = False
xmlDoc.Load "C:\Documents and Settings\michel\dossier\general\excel\leFichier.xml"

'-----chargement des attributs du fichier dans un tableau--------------------
ReDim Preserve Tableau(4, xmlDoc.getElementsByTagName("FICHIER").Length)


For Each xmlElem In xmlDoc.getElementsByTagName("FICHIER") 'remplissage tableau
Tableau(0, i) = xmlElem.getAttribute("nom")
Tableau(1, i) = xmlElem.getAttribute("type")
Tableau(2, i) = xmlElem.getAttribute("date")
Tableau(3, i) = xmlElem.getAttribute("taille")
i = i + 1
Next
'-----------------------------------------------------------------------------


'---- Appliquer un tri sur une des colonnes du tableau -----------------------
indexColTri = 3 'choisir la colonne à trier
'0 = nom
'1 = type
'2 = date
'3 = taille

For i = 0 To xmlDoc.getElementsByTagName("FICHIER").Length
For j = 0 To xmlDoc.getElementsByTagName("FICHIER").Length - 2

'---------
'If CDate(Tableau(indexColTri, j)) > CDate(Tableau(indexColTri, j + 1)) Then 'synthaxe pour tri données date
If CDec(Tableau(indexColTri, j)) > CDec(Tableau(indexColTri, j + 1)) Then 'synthaxe pour tri données numériques
'If Tableau(indexColTri, j) > Tableau(indexColTri, j + 1) Then 'synthaxe pour tri données texte
'---------
For y = 0 To 3
t = Tableau(y, j)
Tableau(y, j) = Tableau(y, j + 1)
Tableau(y, j + 1) = t
Next y
End If
Next j
Next i
'------------------------------------------------------------------------------


'---- afficher l'attribut "nom" après le tri-------------------------------------
For i = 0 To xmlDoc.getElementsByTagName("FICHIER").Length - 1
Debug.Print Tableau(0, i)
Next i
'------------------------------------------------------------------------------


End Sub



bon apres midi
michel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
402
Date d'inscription
vendredi 6 août 2004
Statut
Membre
Dernière intervention
12 octobre 2008
28
bonsoir

je ne suis pas sur d'avoir bien compris mais as tu essayé d'utiliser le meme principe pour boucler sur les attributs "type" , "date" et "taille" :

Sub bouclerSurAttributs_V01()
Dim xmlDoc As DOMDocument
Dim xmlElem As IXMLDOMElement


Set xmlDoc = New DOMDocument
xmlDoc.async = False
xmlDoc.Load "C:\Documents and Settings\michel\dossier\general\excel\leFichier.xml"


For Each xmlElem In xmlDoc.getElementsByTagName("FICHIER")
MsgBox xmlElem.getAttribute("type")
'MsgBox xmlElem.getAttribute("date")
'MsgBox xmlElem.getAttribute("taille")
Next


End Sub

bonne soiree
michel

salut et merci pour ta réponse

En fait dans mon programme il n'est pas question de lecture par chargement ou d'écriture sur le disque de fichier XML.

Il s'agit de la création de document XML pouvant être utilisé en tant qu'objet DOMDocument par la suite dans le programme (en interne donc) ou pouvant éventuellement être affiché sur un navigateur web (mais ceci est une autre histoire...).

Ce que je voudrais, c'est que, lorsque je récupère le contenu des balises "FICHIER" (comme dans mon exemple), je puisse le faire en choisissant de les avoir dans un ordre de rangement précis : soit par l'attribut "taille" ou "type" ou "date" de ces balises.

Peu importe si ce "rangement" doit se faire à la création du document ou à sa lecture, j'aimerai qu'au moment où je récupère les balises "FICHIER" (avec msgbox dans l'exemple) ça se fasse par l'ordre de rangement d'un des trois attributs choisis...

En fait pour faire très simple: je veux toujours lire le parametre "nom" du document avec un msgbox mais selon un ordre de rangement défini par un des trois autres paramètres au choix...

C'est bon ça fonctionne niquel merci beaucoup!