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
%>