Document XML réorganisé par attributs

Résolu
Utilisateur anonyme - 14 févr. 2006 à 16:27
 Utilisateur anonyme - 15 févr. 2006 à 21:28
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

michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
15 févr. 2006 à 14:25
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
michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
14 févr. 2006 à 19:17
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
0
Utilisateur anonyme
15 févr. 2006 à 01:03
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...
0
Utilisateur anonyme
15 févr. 2006 à 01:06
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
15 févr. 2006 à 21:28
C'est bon ça fonctionne niquel merci beaucoup!
0
Rejoignez-nous