Les fichiers à plat peuvent également être générés à partir d'une source XML.
Dans ce cas de sérialisation, il suffit de décomposer la structure XML selon le type de fichier à plat souhaîté.
Il est possible d'utiliser aussi bien le modèle d'objet de document XML qu'une feuille de style de transformation XSLT. Bien que cette dernière semble parfaitement convenir pour ce genre de processus, nous nous attacherons à développer un programme basé sur le DOM XML.
A l'instar de la transformation d'un fichier à plat vers un fichier XML, une étude méticuleuse de la source XML et du résultat textuel envisagé est nécessaire afin de déterminer le type de fichier à plat, les lignes, les champs et les délimiteurs.
Fichier source XML
<statistique>
<client adresse_ip="valeur">
<document poids="valeur">valeur</document>
<protocole>valeur</protocole>
<code>valeur</code>
<methode>valeur</methode>
</client>
...
</statistique>
Modèle de fichier à plat
65.116.145.133 /courscss/style.html 16169 HTTP/1.1 200 GET
adresse_ip document poids protocole code methode
Exemple [voir]
<%
Dim obj_dom
Dim fichier, ligne, champ, texte, delimiteur
Dim racine, noeud, enfant, attribut, attributs
Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
obj_dom.async = False
fichier = Server.MapPath("fichier_log.xml")
obj_dom.load(fichier)
Set racine = obj_dom.documentElement
delimiteur = " "
For Each noeud In racine.childNodes
Set attributs = noeud.attributes
Set attribut = attributs.item(0)
champ = champ & attribut.value & delimiteur
For Each enfant In noeud.childNodes
champ = champ & enfant.text & delimiteur
Set attributs = Nothing
Set attributs = enfant.attributes
If attributs.length > 0 Then
Set attribut = attributs.item(0)
champ = champ & attribut.value & delimiteur
End If
Next
ligne = ligne & champ & chr(10) & chr(13)
Next
Response.write "<b>Le contenu du fichier log :" _
& "</b><br>" & ligne
Set obj_fso = Server.CreateObject("Scripting.FileSystemObject")
set texte = obj_fso.CreateTextFile("c:\fichier_stat.txt", True)
texte.Write ligne
texte.close
Set texte = Nothing
Set fichier = Nothing
%> |