Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comparaison DOM/XSLT Safari/Firefox

8 réponses
Avatar
unbewusst.sein
j'essai de faire une transfo xml -> (x)html de deux manières différentes
:

- classic par DOM (appendChild und so weiter...)
- moins classic par XSLT

les versions d'essais sont respectivement aux pages :

<http://thoraval.yvon.free.fr/AB2Html_sam/index.xhtml> "DOM"
<http://thoraval.yvon.free.fr/AB2Html_sam/index_xslt.xhtml> "XSLT"

la version "DOM" donne le même résultat sur Safari et sur Firefox.

par contre si la version "XSLT" donne le même résultat que la version
"DOM" sur Safari, il n'en va pas de même sur Firefox :
- l'image n'apparaît pas => tout se passe "comme si" la src de l'image
n'était pas chargée
- le résultat n'est pas conforme à la feuille de styles css...

quelqu'un a une idée sur ce genre de pb ???

j'avoue nettement préférer la verion "XSLT" (plus lisible et plus
maintenanble) au tripatouillage de "DOM"...
--
Une Bévue

8 réponses

Avatar
SAM
Une Bévue a écrit :
j'essai de faire une transfo xml -> (x)html de deux manières différentes
:

- classic par DOM (appendChild und so weiter...)
- moins classic par XSLT

les versions d'essais sont respectivement aux pages :

<http://thoraval.yvon.free.fr/AB2Html_sam/index.xhtml> "DOM"
<http://thoraval.yvon.free.fr/AB2Html_sam/index_xslt.xhtml> "XSLT"

la version "DOM" donne le même résultat sur Safari et sur Firefox.

par contre si la version "XSLT" donne le même résultat que la version
"DOM" sur Safari, il n'en va pas de même sur Firefox :
- l'image n'apparaît pas => tout se passe "comme si" la src de l'image
n'était pas chargée
- le résultat n'est pas conforme à la feuille de styles css...

quelqu'un a une idée sur ce genre de pb ???



Ou bien tu as bidouillé depuis ou bien, à équipement presque équivalent,
nous avons qques dissemblances :

iMac-intel - Système 10.4.10

Firefox 2.0.0.12 :
- exactement pareil à l'écran pour les 2 tests
- menu de gauche 'group' pareil itou sur les 2 tests
- 'people' et 'person' sont vides
- Ha! ? fallait clicoter ! ?
- dans le test 2 xslt :
l'image non vue ... en effet y a pas la trombine dans la 'person'
et non plus que zip et ville
et remarque à côté photo

Safari 2 :
- pareil pour les 2 tests
- présentation idem Fx (avec ttes les images figurant le Carnet)
- pas de menu à gauche :-(
et pas de web kit non plus ... que du "normal" de base.

Fx :
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr; rv:1.8.1.12)
Gecko/20080201 Firefox/2.0.0.12

Safari :
Version 2.0.4 (419.3)

--------------------------------------------------

fichier 'control_xslt.js' :

ici où 'xml' est le responseXML :

function buildGroupList() {
grps_elt = xml.getElementsByTagName( "GRPS" )[ 0 ];

J'aurais imaginé qu'il eût fallu faire :

var D = document.createElement('div');
D.innerHTML = xml; // ou D.innerText = xml; ?

et seulement alors extraire la balise

grps_elt = D.getElementsByTagName( "GRPS" )[ 0 ];


------
d'où sortent :
- XSLTProcessor
- transformToFragment
Ha !? ce sont des trucs spécifiques à Mozilla

Faut donc peut-être voir à voir de ce côté pour l'image ?

Attention !
Pour info :
Dans mes notes j'utilise aussi des caractères non alpha-numériques

---------------------------------------------------

fichier 'control.js' :

Même remarque que ci-avant concernant la recherche de balises dans ce
que je croyais être un string.

Erreur :
======= addr has no properties
http://thoraval.yvon.free.fr/AB2Html_sam/control.js
Line 92

Là :
loc = addr.getElementsByTagName("LOCALITY")[0].firstChild.nodeValue;
zip = addr.getElementsByTagName( "PCODE" )[ 0].firstChild.nodeValue;

comme sans doute le reste avant (nom, prenom, entreprise, tel 1, tél 2,
et autres téls, e-mail, personne amie ou assistant, re-tel etc ...)
prévoir que ça peut exister
et surtout la condition pour l'utiliser ou non :

function extr(what) {
if (addr &&
addr.getElementsByTagName(what) &&
addr.getElementsByTagName(what)[0] &&
addr.getElementsByTagName(what)[0].firstChild.nodeValue &&
addr.getElementsByTagName(what)[0].firstChild.nodeValue !='')
return addr.getElementsByTagName(what)[0].firstChild.nodeValue;
else return false;
}

var loc = extr("LOCALITY");
var zip = extr("PCODE");
if(loc || zip) {
loc = loc? loc : '';
zip = zip? zip : '';
dd.appendChild( document.createTextNode( zip + " " + loc ) );
}

--
sm
Avatar
unbewusst.sein
SAM wrote:


Ou bien tu as bidouillé depuis ou bien, à équipement presque équivalent,
nous avons qques dissemblances :

iMac-intel - Système 10.4.10



iMac PPC 10.4.11

Firefox 3.0b4
Safari 3.1 (4525.13)

firefox - dom :
<http://cjoint.com/data/duo23PXEAm.htm>

firefox - xslt :
<http://cjoint.com/data/duo5A0gikR.htm>

safari - dom :
<http://cjoint.com/data/dupgCxh7rl.htm>

safari - xslt :
<http://cjoint.com/?durHJMq1j1>


Firefox 2.0.0.12 :
- exactement pareil à l'écran pour les 2 tests
- menu de gauche 'group' pareil itou sur les 2 tests
- 'people' et 'person' sont vides



oui, "group" et "people" se font de la même manière en dom et en xslt,
seule "person" change entre les deux versions...


- Ha! ? fallait clicoter ! ?
- dans le test 2 xslt :
l'image non vue ... en effet y a pas la trombine dans la 'person'
et non plus que zip et ville
et remarque à côté photo

Safari 2 :
- pareil pour les 2 tests
- présentation idem Fx (avec ttes les images figurant le Carnet)
- pas de menu à gauche :-(
et pas de web kit non plus ... que du "normal" de base.



qu'est-ce que tu appelles le "web kit" ? une version de safari ?


Fx :
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr; rv:1.8.1.12)
Gecko/20080201 Firefox/2.0.0.12

Safari :
Version 2.0.4 (419.3)

--------------------------------------------------

fichier 'control_xslt.js' :

ici où 'xml' est le responseXML :

function buildGroupList() {
grps_elt = xml.getElementsByTagName( "GRPS" )[ 0 ];

J'aurais imaginé qu'il eût fallu faire :

var D = document.createElement('div');
D.innerHTML = xml; // ou D.innerText = xml; ?

et seulement alors extraire la balise

grps_elt = D.getElementsByTagName( "GRPS" )[ 0 ];



non, non, ce que je fais est corect...

------
d'où sortent :
- XSLTProcessor
- transformToFragment
Ha !? ce sont des trucs spécifiques à Mozilla



non c'est du dom-xslt marche sur safari/firefox au -


Faut donc peut-être voir à voir de ce côté pour l'image ?

Attention !
Pour info :
Dans mes notes j'utilise aussi des caractères non alpha-numériques

---------------------------------------------------

fichier 'control.js' :

Même remarque que ci-avant concernant la recherche de balises dans ce
que je croyais être un string.

Erreur :
======= > addr has no properties
http://thoraval.yvon.free.fr/AB2Html_sam/control.js
Line 92

Là :
loc = addr.getElementsByTagName("LOCALITY")[0].firstChild.nodeValue;
zip = addr.getElementsByTagName( "PCODE" )[ 0].firstChild.nodeValue;

comme sans doute le reste avant (nom, prenom, entreprise, tel 1, tél 2,
et autres téls, e-mail, personne amie ou assistant, re-tel etc ...)
prévoir que ça peut exister



oui, bien sûr ;-)

et surtout la condition pour l'utiliser ou non :

function extr(what) {
if (addr &&
addr.getElementsByTagName(what) &&
addr.getElementsByTagName(what)[0] &&
addr.getElementsByTagName(what)[0].firstChild.nodeValue &&
addr.getElementsByTagName(what)[0].firstChild.nodeValue !='')
return addr.getElementsByTagName(what)[0].firstChild.nodeValue;
else return false;
}

var loc = extr("LOCALITY");
var zip = extr("PCODE");
if(loc || zip) {
loc = loc? loc : '';
zip = zip? zip : '';
dd.appendChild( document.createTextNode( zip + " " + loc ) );
}




oui, je suis d'acord, pour la version "DOM" il faudrait que j'améliore
les tests...

MAIS, en ce qui concerne la div de droite "person", je préfère utiliser
xslt, c'est plus élégant comme solution, plus facile à lire et à
maintenir, c'est aussi beaucoup plus souple en écriture que la soupe de
DOM avec ses appendChild and Co...

malgré ce pb, je regarde, cette aprem's le search sur le différents
champs...
--
Une Bévue
Avatar
unbewusst.sein
SAM wrote:

Ou bien tu as bidouillé depuis ou bien



bon ça roule maintenant chez moi (pas encore online)

j'avais oublié un namespace dans preview.xsl dont les premières lignes
deviennent :

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

le reste identique...

j'ai commencé le search, OK sur name, je me renseigne sur les hashes en
js pour balayer les autres tags...
--
Une Bévue
Avatar
SAM
Une Bévue a écrit :

j'ai commencé le search, OK sur name, je me renseigne sur les hashes en
js pour balayer les autres tags...



Pourquoi sur 'name' ?
yaka chercher dans chaque vCard (sauf groupes)
(Address Book ne cherche pas que dans les noms)

function cherche(myStr) {
var ul = document.createElement( "ul" );
var affiche = function( fn ) {
var name = fn.firstChild.nodeValue;
var li = document.createElement( "li" );
li.appendChild( document.createTextNode( name ) );
li.setAttribute( "onclick", "buildAddressCard('"+name+"')" );
ul.appendChild( li );
}
var tout = req.responseXML.getElementsByTagName( "vCard" );
var result = [];
for(var i=0,lg=tout.length; i<lg; i++)
if(tout[i].innerHTML.indexOf(myStrg)>=0)
affiche( tout[i].getElementsByTagName('FN')[0] );
peopleDiv.innerHTML = "";
peopleDiv.appendChild( ul );
}

--
sm
Avatar
unbewusst.sein
SAM wrote:


Pourquoi sur 'name' ?



heuh, c'était juste pour un petit essai, histoire de commencer...

yaka chercher dans chaque vCard (sauf groupes)
(Address Book ne cherche pas que dans les noms)

function cherche(myStr) {
var ul = document.createElement( "ul" );
var affiche = function( fn ) {
var name = fn.firstChild.nodeValue;
var li = document.createElement( "li" );
li.appendChild( document.createTextNode( name ) );
li.setAttribute( "onclick", "buildAddressCard('"+name+"')" );
ul.appendChild( li );
}
var tout = req.responseXML.getElementsByTagName( "vCard" );
var result = [];
for(var i=0,lg=tout.length; i<lg; i++)
if(tout[i].innerHTML.indexOf(myStrg)>=0)
affiche( tout[i].getElementsByTagName('FN')[0] );
peopleDiv.innerHTML = "";
peopleDiv.appendChild( ul );
}



j'ai pas fait comme ça, confère mon essai online :

<http://thoraval.yvon.free.fr/AB2Html_sam/index_search.xhtml>

on peut donc chercher soit :

- Tout => tous les champs de la vCard
- Name => champ du nom
- Adresse => champs de/des l'adresse(s) (STREET, PCODE, LOCALITY)
- Téléphone => champ du/des TEL(s) (NUMBER)
- Courriel => champ du/des EMAIL(s) (USERID)
- Internet => champ du/des URL
- Messagerie => champ du/des IM (ID | NICKNAME)
- Note => champ de la NOTE

bon, tjs, pour commencer j'ai fait ça par "val.indexOf( txt ) > - 1"
mais je peaufinerai par une regex de manière à être insensible à la
casse...

Ah l'événement (dans mon 'input type="text"'...) qui provoque le
démarrage de la recherche est 'onblur', il y a peut-être plus judicieux
???
--
Une Bévue
Avatar
SAM
Une Bévue a écrit :
SAM wrote:

Pourquoi sur 'name' ?



heuh, c'était juste pour un petit essai, histoire de commencer...



réponse en BAL (free)


--
sm
Avatar
unbewusst.sein
SAM wrote:


réponse en BAL (free)



yvon(dot)thoraval(at)gmail(dot)com

je n'utilise + free.

mais c(est vrai que notre discussion est "privée"...
--
Une Bévue
Avatar
SAM
Une Bévue a écrit :
SAM wrote:

réponse en BAL (free)



je n'utilise + free.



Merdum ! j'aurais dû doubler!
c'est forwardé.