j'ai du passer de php4 à php5 malgrés moi.

Domxml et xslt ne sont plus supportes par Php5, seul reste Dom et Xsl.
J'ai modifier les commandes DOMxml vers DOM sans probléme
J'ai une class pour generer un object XML ou XSL.

Ceux ci ont respectivement le code XML issue d'une DB et le code XSL pour la transformation.

Je dois utiliser maintenant les commandes suivantes:

$proc=new XSLTProcessor();
$ObjXSL->loadXML($ObjXSL->saveXML());
$proc->importStyleSheet($ObjXSL);
echo $proc->tranformtoXML($ObjXML);

La commande en gras est nécessaire pour que la transformation fonctionne.
Convertir un Object DOM en "String" puis de nouveau en Object DOM, quelle perte de temps. Smiley fache

Je rappelle qu' à la base l'object "ObjXSL" est issu d'un Object DOM.
Les elements de la feuille XSL sont crées avec les commandes DOM.

Du coup, il me semble qu'on ne peut pas créer de feuille XSL avec l'Object DOM sans ce detournement ou que le transformateur n'aime pas cette pratique.

Est ce qu'il aurait quelqu'un qui aurait une solution plus professionelle. Smiley biggrin
Merci.

PS: je continu de chercher.....Mais je n'es trouvé personne qui fasse de la génération à la voler de code XML et XSL. En tout cas pas d'exemple
Smiley decu
sylvain38 a écrit :
Domxml et xslt ne sont plus supportes par Php5, seul reste Dom et Xsl.
Etrange vision des choses : il ne s'agit pas d'une disparition, mais d'un remplacement. Il y a derrière les mêmes librairies, mais l'API a été améliorée dans PHP5.
sylvain38 a écrit :
$proc=new XSLTProcessor();
$ObjXSL->loadXML($ObjXSL->saveXML());
$proc->importStyleSheet($ObjXSL);
echo $proc->tranformtoXML($ObjXML);

La commande en gras est nécessaire pour que la transformation fonctionne.
Convertir un Object DOM en "String" puis de nouveau en Object DOM, quelle perte de temps.
Cette fameuse ligne en gras me parait bien étrange.
sylvain38 a écrit :
Est ce qu'il aurait quelqu'un qui aurait une solution plus professionelle. biggrin
Merci.

PS: je continu de chercher.....Mais je n'es trouvé personne qui fasse de la génération à la voler de code XML et XSL. En tout cas pas d'exemple
Il t'aurait suffit de faire une recherche sur ce forum sur la chaîne "XSLTProcessor". Il y a de multiples exemples de code. Par exemple celui ci. De nombreuses personnes ici générent du XHTML avec du XML+XSLT à la volée. Smiley cligne
Je viens de regarder l'exemple donnée.

Cet exemple ne fait pas de la génèration à la voler de document XML ou XSL , mais simplement de charger un fichier à partir d'une url; puis de faire la transformation.

La commande "importStyleSheet($param)" doit avoir comme paramétre un Object DOM.

Voici le contenu de l'object XSL:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0">
<xsl:output method="html" media-type="text/html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:include href="xsl/cadre.xsl"/>
</xsl:stylesheet>

Cette feuille est reconnu sous sablotron(php4),libxml2(php4),IE,FF.

Le passage libxml2 vers Php5 a modifier le comportement!!!!!

Si quelqu'un se sent la motivation de génèrer une feuille de style XSL avec l'object DOM puis de la passer en paramétre à importstyleSheet().

Exemple de code:
[#]

$XSL= new DomXML();
$node=$XSL->SetXSL();
$XSL->QXSL_Inc("cadre.xsl",$node);

$XML=new DomXML();
$root=$XML->SetXML('toto');
$XML->DOMAttribute('id','123456',$root);
$XML->DOMElement('page',$root);
etc..... code XML

$proc=new XSLTProcessor();
$proc->importStyleSheet($XSL);
echo $proc->transformToXML($XML);

/*==================================*/

class DomXML
{
var $doc;
var $node;

function DomXML(){
$this->doc = new DOMDocument('1.0', 'utf-8');
}

function DOMDump()
{
return $this->doc->saveXML();
}

function SetXML($node)
{
$this->node=$this->DOMElement($node);
return $this->node;
}

function SetXSL(){
$this->node=$this->DOMElement('xsl:stylesheet');
$this->DOMAttribute('version','1.0',$this->node);
$this->DOMAttribute('xmlns:xsl','http://www.w3.org/1999/XSL/Transform',$this->node);
$out=$this->DOMElement('xsl:output','',$this->node);
$this->DOMAttribute('method','html',$out);
$this->DOMAttribute('media-type','text/html',$out);
$this->DOMAttribute('encoding','utf-8',$out);
$this->DOMAttribute('doctype-public','-//W3C//DTD XHTML 1.0 Strict//EN',$out);
$this->DOMAttribute('doctype-system','http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd',$out);
return $this->node;
}

function QXSL_Inc($Inc,$level)
{
$m=$this->DOMElement('xsl:include','',$level);
$this->DOMAttribute("href",$Inc,$m);
}

function DOMAttribute($name,$value,$node)
{
$node->setattribute($name,$value);
}

function DOMElement($name,$value='',$node='')
{
$no = $this->doc->createelement($name,$value);
$root = $node->appendchild($no);
return $root;
}

function DOMCData($value,$node)
{
$no=$this->doc->createcdatasection($value);
$node->appendchild($no);
}
//---------------------------
function DOMElementCData($name,$value,$node)
{
$tp=$this->DOMElement($name,'',$node);
$this->DOMCData($value,$tp);
return $tp;
}

}
sylvain38 a écrit :
Je viens de regarder l'exemple donnée.

Cet exemple ne fait pas de la génèration à la voler de document XML ou XSL , mais simplement de charger un fichier à partir d'une url; puis de faire la transformation.
Ah ! Alors qu'appelles tu à la volée ?
S'il s'agit simplement de manipuler du XML en mémoire alors :
- remplace load($xml_file) par loadXML($xml_file) si ton XML est en texte dans une variable
- passe directement au importStyleSheet() si ton XML est déjà un objet DOM
sylvain38 a écrit :
Cette feuille est reconnu sous sablotron(php4),libxml2(php4),IE,FF.

Le passage libxml2 vers Php5 a modifier le comportement!!!!!
Une feuille XSL correcte va fonctionner en PHP4, IE, FF comme en PHP5. J'ai expérimenté de nombreux processeurs XSLT et vraiment je n'ai jamais rencontré aucun problème sauf avec Sablotron qui est particulièrement lourd. Selon moi PHP5 est le plus performant, sauf à utiliser directement la librairie libxslt sans l'API PHP. Le passage de PHP4 à PHP5 (à version de libxslt constante) n'a pas d'impact sur le code XSL lui-même. Et heureusement que l'implémentation du standard XSL ne change pas tout les quatre matins.

sylvain38 a écrit :
Si quelqu'un se sent la motivation de génèrer une feuille de style XSL avec l'object DOM puis de la passer en paramétre à importstyleSheet().
Si ton objet DOM est une feuille XSLT correcte, alors l'appel de la méthode importStyleSheet sur cet objet est la seule chose qu'il y ait à faire, comme cela est donné dans l'exemple que tu as regardé.
Je dois mal m'exprimer Smiley sweatdrop .

a écrit :
Ah ! Alors qu'appelles tu à la volée ?


Et bien lorsque le code XML est crée avec l'Object DOM et pas charger en tant que fichier à plat.
Et idem pour le code XSL.

Je n'est pa
Parfait.

Effectivement dans ce cas, les instructions load() ou loadXML() ne te sont pas utiles.

Il te suffit de charger la feuille XSLT à l'aide de la méthode importStyleSheet(). Cela fonctionne en PHP5. Quelle est l'erreur relevée lorsque tu fais l'import de la feuille de style ?

Par ailleurs je remarquais que ta feuille de style est quasiment statique, seul le nom de la feuille à importer est susceptible de varier. Manipuler le DOM parait être le marteau pilon pour écraser la punaise. Il me semble plus adapté dans ce cas de stocker la feuille de style dans une chaîne de texte.
Désoler je n'ai pu finir mon dernier poste.

Voilà l'erreur.

a écrit :
Warning: XSLTProcessor::importStylesheet() [function.importStylesheet]: compilation error: element xsl:stylesheet in php/class_xml.php on line 232

Warning: XSLTProcessor::importStylesheet() [function.importStylesheet]: xsltParseStylesheetProcess : document is not a stylesheet in php/class_xml.php on line 232

Warning: XSLTProcessor::transformToXml() [function.transformToXml]: No stylesheet associated to this object in php/class_xml.php on line 233


D'ou la commande en gras au debut du poste.

Quand je dis:
a écrit :

Le passage libxml2 vers Php5 a modifier le comportement!!!!!


Ce n'est pas le transformateur que je critique , mais plutôt la manier dont la commande "importStyleSheet()" interpréte l'object DOM.

Manquerait-il quelque chose dans ma feuille de style? Smiley eek

a écrit :
Par ailleurs je remarquais que ta feuille de style est quasiment statique, seul le nom de la feuille à importer est susceptible de varier. Manipuler le DOM parait être le marteau pilon pour écraser la punaise. Il me semble plus adapté dans ce cas de stocker la feuille de style dans une chaîne de texte.


Oui tout à fait, mais les choses sont plus compliquées. Smiley cligne

a écrit :
Il t'aurait suffit de faire une recherche sur ce forum sur la chaîne "XSLTProcessor". Il y a de multiples exemples de code. Par exemple celui ci. De nombreuses personnes ici générent du XHTML avec du XML+XSLT à la volée. cligne


En tout cas pas d'exemple ici et ailleurs (Anglais , Français et Thaillandais compris).Je dois étre aveugle...... Smiley biggol