Parser xml

Toutes les astuces sur le langage JavaScript dans Lotus Notes

Parser xml

Messagepar abertisch » 15 Mai 2009 à 11:11

Bonjour,

Un petit parser xml en JS pour les vues lotus notes. Il fonctionne avec tous les browser (même ie... :lol: )

fonction "parserXml" à utiliser :

Code : Tout sélectionner
parserXml("/mabase.nsf/mavue?readviewentries&start=1&count=-1&expandview, mon fichier xsl', le nom div pour afficher le résultat, mon array() de paramètres)


Fichier JS parserXML :
[syntax="javascript"]
var transformed = false;
function parserXml(xml, xsl, target, params){
if (!browserSupportsXSLT())
return;

// code for IE
if (window.ActiveXObject) {
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
xslDoc.async = false;
xslDoc.load(xsl);

//Chargement du document XML
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
xmlDoc.async = false;
xmlDoc.load(xml);
var xslt = new ActiveXObject("Msxml2.XSLTemplate");
xslt.stylesheet = xslDoc;
var xslProc;
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;

for (parm in params) {
if(params.hasOwnProperty(parm))
{
xslProc.addParameter(parm, params[parm]);
}
}
xslProc.transform();
$(target).innerHTML = xslProc.output;
}
else
{
transformed = false;
var xm = {
readyState: 4
};

var xs = {
readyState: 4
};

xm = new XMLHttpRequest();
xm.onreadystatechange = function() {change(xm, xs, target, params);};
xm.open("GET", xml);
xm.send(null);
xs = new XMLHttpRequest();
xs.onreadystatechange = function() {change(xm, xs, target, params);};
xs.open("GET", xsl);
xs.send(null);
}
}

var change = function(xm, xs, target, params) {
if (xm.readyState == 4 && xs.readyState == 4 && !transformed) {
xmlDoc = xm.responseXML;
xsltDoc = xs.responseXML;
var resultDoc;
var processor = new XSLTProcessor();

if (typeof processor.transformDocument == 'function') {
// obsolete Mozilla interface
resultDoc = document.implementation.createDocument("", "", null);
for (parm in params) {
if(params.hasOwnProperty(parm))
{
processor.setParameter(null, parm, params[parm]);
}
}
processor.transformDocument(xm.responseXML, xs.responseXML, resultDoc, null);
var out = new XMLSerializer().serializeToString(resultDoc);
$(target).update(out);
}
else {
processor.importStylesheet(xs.responseXML);
for (parm in params) {
if(params.hasOwnProperty(parm))
{
processor.setParameter(null, parm, params[parm]);
}
}
resultDoc = processor.transformToFragment(xm.responseXML, document);
$(target).innerHTML = '';
$(target).appendChild(resultDoc);
}
transformed = true;
}
}

function browserSupportsXSLT() {
var support = false;
if (document.recalc) { // IE 5+
support = true;
}
else if (window.XMLHttpRequest != undefined && window.XSLTProcessor != undefined) { // Mozilla 0.9.4+, Opera 9+
var processor = new XSLTProcessor();
if (typeof processor.transformDocument == 'function') {
support = window.XMLSerializer != undefined;
}
else {
support = true;
}
}
return support;
}[/syntax]
"Lotus, il n'y a qu'en rouleaux que ça fait pas mal au cul"
abertisch
Roi des posts
Roi des posts
 
Message(s) : 763
Inscrit(e) le : 25 Oct 2006 à 13:51
Localisation : Suisse

Retour vers JavaScript