Thierry Seunevel Thierry 
Seunevel 
 Code en stock       
  Accueil   Réalisations Code en stock Téléchargement Curriculum Contact
Accueil > Code en stock > HTML2XML

Génération XML à partir d'un document HTML (5)

. Principe
. Eléments et attributs
. Formulaires multiples
. Exemple complet
. Le code Javascript
Le code Javascript
Le fichier computeForms.js utilisé dans les exemples précédents est présenté ci-dessous.
La fonction décrite dans cette article est computeXML.

Le code Javascript
1

2










3















4





5













6




7
function leftFill(num) {
  return "" + ((num < 10) ? "0" : "") + num;
}

function bif(sFunct) {
  if (sFunct == "%date") {
    today = new Date();
    return leftFill(today.getDate()) + leftFill(today.getMonth()+1) +
      leftFill(today.getYear()).substring(2);
  }
  if (sFunct == "%time") {
    today = new Date();
    return leftFill(today.getHours()) + leftFill(today.getMinutes());
  }  
}

function computeXML(theForm) {
var elm="";
  var formX = document.forms[0];
  var nbe=0;
  for (i=0; i<formX.elements.length; i++) {
    if (formX.elements[i].name=="xmlversion")
      var txt = "<" + formX.XMLVersion.value + ">\n";
    else if (formX.elements[i].name=="element")
      nbe = nbe + 1;
  }
  elm = new Array(nbe-1);
  var j=0;
  for (i=0; i<formX.elements.length; i++) {
    if (formX.elements[i].name=="element") {
      elm[j++]=formX.elements[i].value;
      txt = txt + "<" + formX.elements[i].value + ">\n";
    }
  }
  for (i=0 ; i< document.forms.length ; i++) {
    var formX = document.forms[i];
    var formN = formX.name;
    if (formN.substring(0,1) != "_") {
      j = formN.indexOf("__");
      if (j > 0) formN = formN.substring(0,j);
      var attr = "";
      var elmts = "";
      for (j=0 ; j<formX.elements.length ; j++) {
        var elmName = formX.elements[j].name;
        if (elmName.substring(0,1) != "_") {
          var val = formX.elements[j].value.toUpperCase();
          if (val.substring(0,1) == "%") val=bif(val);
          if (val.substring(0,1) == "?") {
            toDo = formX.elements[j].value.substring(1);
            val = eval(toDo);}
          if (val != "")   {
            if (elmName.substring(0,1) == "@")
              attr += " " + elmName.substring(1) + "=\"" + val + "\"";
            else elmts += "<" + elmName + ">" + val + "</" + elmName +">\n";
          }
        }
      }
      if (attr != "" || elmts != "") {
        txt += "<" + formN + attr;
        if (elmts != "")  txt += ">\n" + elmts + "</" + formN + ">\n";
        else txt += "/>\n";
      }
    }
  }
  for (j=nbe-1 ; j>=0 ; j--) txt += "</" + elm[j] + ">\n";
  document._FormFin.xml.value = txt;
  return true;
}

  1. La fonction leftFill a pour but d'ajouter le zéro non significatif quand les jours, mois .. ne comportent qu'un digit (7 est retourné = 07).

  2. La fonction bif a pour but de retourner une valeur auto calculable. Ici ont été implémentées les calcul de la date du jour et de l'heure d'exécution (hhmm).
    La fonction computeXML fait appel à la fonction bif lorsqu'elle rencontre un champ dont la valeur est exprimée sous la forme %XXX, en passant cette valeur à la fonction.

  3. La fonction computeXML reçoit en paramètre une référence au formulaire dont elle doit garnir le champ XML.
    Elle recherche tout d'abord dans le premier formulaire du document un champ nommé XMLVersion, puis compte le nombre d'occurence d'un champ nommé ELEMENT.
    Les différentes valeurs des champs ELEMENT sont ensuite ajoutées sous forme de tags d'ouverture et empilés dans un tableau.

  4. La boucle principale exploite successivement chaque formulaire du document, en ignorant ceux dont le nom débute par un caractère souligné (_). Si le nom contient deux soulignements (__), on ne conserve que ce qui précède

  5. On itére ensuite dans chaque champ du formulaire courant en excluant ceux dont le nom débute par un souligné (_).
    On extraite le nom et la valeur de chaque champ. Si la valeur débute par un caractère %, on fait appel à la fonction de même nom. S'il débute par ?, on exécute un eval de l'expression. Si le nom de champ commence par @, on ajoute une chaîne de type NOM="valeur" à une variable comportant les attributs, sinon on ajoute une chaine de la forme <NOM>valeur</NOM> à une variable contenant les éléments.

  6. Si on a rencontré des attributs ou des éléments non vides, on ajoute à la chaine XML l'élément de début (égal au nom de formulaire), suivi des attributs puis des éléments.
    Suivant qu'il existe ou non des éléments, on ferme l'élément soit sous la forme </NOM>, soit simplement avec />.

  7. En fin de traitement, on ajoute les tags de fermeture des éléments externes décrits dans les champs ELEMENT du premier formulaire.

    Haut de page  Haut de page  Précédent  Exemple complet |  


©  Thierry Seunevel (2004) www.seusoft.com