Bonjour,

j'utilise le code ci-dessous pour afficher un fichier XML dans une page web

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  dir="ltr" lang="fr-FR">
<head>
  <title>décodage SRFIL</title>
  <link rel="shortcut icon" href="favicon.ico" />
  <link rel="stylesheet" href="style.css" type="text/css"/>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <script type="text/javascript">
// <![CDATA[
// Fonction de rendu de la feuille de style XSL
function displayResult(sigle,valeur)
{
  document.getElementById("content").innerHTML='';
  xmlfile="res/test.xml";
  xslfile="srfil.xsl";
 
  // code for IE
  if (window.ActiveXObject)
  {
    // Chargement de la feuille XSLT
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
    xslDoc.async = false;
    xslDoc.load(xslfile);
 
    //Chargement du document XML
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
    xmlDoc.async = false;
    xmlDoc.load(xmlfile);
 
    //Transformation
    var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
    xslt.stylesheet = xslDoc;
    var xslProc;
    xslProc = xslt.createProcessor();
    xslProc.input = xmlDoc;
    if ( sigle != "" && valeur != "")
    {
      xslProc.addParameter("filtresigle", sigle); //passage du paramètre "field"
      xslProc.addParameter("filtrevalue", valeur);  //passage du paramètre "order"
      xslProc.addParameter("gofiltre", 1);  //passage du paramètre "order"
    }
    else
    {
      xslProc.addParameter("gofiltre", 0);  //passage du paramètre "order"
    }
    xslProc.transform();
 
    //Affichage du résultat
    document.getElementById("content").innerHTML=xslProc.output;
    }
 
  // code for Mozilla, Firefox, Opera, etc.
  //else if (document.implementation && document.implementation.createDocument)
  else
  {
    xml=loadXMLDoc(xmlfile);
    xsl=loadXMLDoc(xslfile);
    xsltProcessor=new XSLTProcessor();
    xsltProcessor.importStylesheet(xsl);
 
    // Si les données pour le filtrage sont fournies on transmet les paramètres
    // au fichier xsl et on autorise le filtrage
    if ( sigle && valeur)
    {
      xsltProcessor.setParameter(null, "filtresigle", sigle);
      xsltProcessor.setParameter(null, "filtrevalue", valeur);
      xsltProcessor.setParameter(null, "gofiltre", "1");
    }
    // Sinon on désactive le filtrage
    else
    {
      xsltProcessor.setParameter(null, "gofiltre", "0");
    }
    // Rendu de l'affichage
    resultDocument = xsltProcessor.transformToFragment(xml,document);
    // Affichage dans la page web
    document.getElementById("content").appendChild(resultDocument);
  }
}
 
function loadXMLDoc(dname)
{
  if (window.XMLHttpRequest)
  {
    xhttp=new XMLHttpRequest();
  }
  else
  {
    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xhttp.open("GET",dname,false);
  xhttp.send("");
  return xhttp.responseXML;
}
 
// Validation du formulaire pour le filtrage
function valider()
{
  // si les données sont présentes on fourni les données de filtrage
  // au script de rendu
  if(document.getElementById('formfiltre').sigle.value != "" && document.getElementById('formfiltre').valeur.value != "")
  {
    displayResult(document.getElementById('formfiltre').sigle.value,document.getElementById('formfiltre').valeur.value);
  }
  // si il n'y a pas de donnée, on lance le rendu sans filtrage
  else if (document.getElementById('formfiltre').sigle.value == "" && document.getElementById('formfiltre').valeur.value == "")
  {
    displayResult();
  }
  // sinon, on stop et on averti l'utilisateur
  else
  {
    alert("Saisissez les données");
  }
  return false;
}
 
// Fonction d'effacement des données présentes dans le formulaire
function Reset()
{
  document.getElementById('formfiltre').sigle.value = "";
  document.getElementById('formfiltre').valeur.value = "";
  displayResult();
  return false;
}
 
// ]]>
</script>
 
</head>
 
<body onload="displayResult()">
  <div id="header">
    <h1><a href='http://srfil.maxk.fr'>Décodage SRFIL</a></h1>
onclick="window.open('log/test.log','log','width=650,height=600,menubar=yes,status=yes,scrollbars=yes')">test_SRFIL.log</a></h2>
  </div>
  <div id="filtre">
    <form id="formfiltre" action="" onsubmit="return valider()" onreset="return Reset()" method="get">
      <p>
        <label class="formsiglelb" for="sigle">Sigle</label>
        <input class="formsigle" type="text" name="sigle" value="" id="sigle" />
        <label class="formvaleurlb" for="valeur">Valeur</label>
        <input class="formvaleur"  type="text" name="valeur" value="" id="valeur"/>
        <input id="OKbouton" class="bouton" type="submit" value="OK" />
        <input id="RESETbouton" class="bouton" type="reset" value="Reset" />
      </p>
    </form>
  </div>
  <div id="content">
 
  </div>
</body>
 
</html>

J'y ai intégré une fonction de filtrage qui permet (via le fichier XSL) de mettre l'attribut "display : none" à ce que je ne veux pas afficher.


Tout fonctionne très bien, mais le pb viens d'une fonction que j'essaie de mettre en place:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function find_div_class()
{
  var count = 0;
  var counttot = 0;
  var divCollection = document.getElementsByTagName("div");
  for (var i=0; i<divCollection.length; i++)
  {
    if(divCollection[i].getAttribute("class") == "msg" && divCollection[i].getAttribute("style") == "display: none" )
    {
      count = count + 1;
    }
    if(divCollection[i].getAttribute("class") == "msg")
    {
      counttot = counttot + 1;
    }
  }
  if ( counttot == count && count != 0 )
  {
  	warning = '<div class="warning">';
  	warning += '<p class="warnname">Pas de message SRFIL trouvé</p>';
  	warning += '<p class="warndesc">Veuillez vérifier les paramètres de filtrage "sigle" et "valeur"</p>';
  	warning += '<p class="warndesc">Cliquer sur "Reset" pour supprimer le filtrage</p>';  	
  	warning += '</div>';
  	alert("Pas de message Trouvé");
	  document.getElementById("content").appendChild(warning);
  }
}
exécutée juste à la fin de la fonction DisplayResult, elle permet de détecté si tout les messages ont l'attribut "display : none" afin d'avertir l'utilisateur qu'il n'y a rien à afficher.

le souci c'est que la ligne

document.getElementById("content").appendChild(warning); ne fonctionne pas.