Forum Programmation.php Soucis avec des fichiers xml

Posté par  .
Étiquettes : aucune
0
17
jan.
2006
Hello !
Chaque jour amène sa peine... Et là, c'est le passage à PHP5 qui me fout tout en l'air. Je m'explique :
J'ai une page web qui contient deux formulaires : un menu vertical et le formulaire de données.
Chacun de ces formulaires est produit par la chaine suivante :
Un script php me créée un source xml (en mémoire, pas dans un fichier), et chacun de ces contenus xml est parsé grâce à deux fichiers xsl séparés.
Avant, avec php4, l'application de la feuille de transformation se passait sans problèmes, mais aujourd'hui, je me retrouve avec un beau <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
lors du parsage de la seconde variable xml.
Pour être (j'espère) un peu plus clair, mon source php ressemble à ça :

<?php
$menuXml = genMenu ($chemin);
$formulaire = genEcran ($ecran);
parseMenu($menuXml, $xslMenuSheet);
parseEcran($formulaire, $xsmScreenSheet);
?>

Comment puis-je éviter ce problème, que je n'avais pas avant ?
Par avance merci pour votre aide et vos conseils.
P.S. : avant, j'utilisais xsl:output method="xhtml" et ça ne lui posait pas plus de problèmes que ça. Maintenant, il m'a fallu virer le x... Pas compris pourquoi non plus....
  • # xsl:output

    Posté par  . Évalué à 1.

    Bah bizarre qu'il ne t'ai pas jeté avant pour ton xhtml vu que ça ne fait pas partie des trucs standards.

    Perso ça ne fait ça (avec PHP5) que lorsque je spécifie l'attribut version du tag xsl:output. Tu utilises quoi pour faire tout ça ? Un new XSLTProcessor() ... ->transformToXml() ??
    • [^] # Re: xsl:output

      Posté par  . Évalué à 2.

      Déjà merci pour ta réponse, même si ça ne m'aide pas beaucoup !
      Enfin, voilà toujours un complément d'informations.
      Pour le xhtml, ouais, j'ai compris quand les fonctions de parsage de php5 m'ont jeté... Mais ce n'est pas trop ça le problème, en effet.

      Pour des soucis de compatibilité avec une autre machine sur laquelle tourne un "vieux" php4, j'ai pompé le wrapper généreusement fourni sur la doc de php (php.net). J'ai dû faire quelques adaptations, car le gars (fort sympatique au demeurant) qui a posté le wrapper a supposé que les arguments $_xml et $_xsl faisaient référence à des fichiers... Comme ce n'est pas le cas pour moi, j'ai fait l'adaptation nécessaire pour prendre en compte le contenu de mes variables (appel à loadXML($args[$xml_arg])). Voilà, en espérant que ça aidera à faire comprendre mon soucis.
      Ah, oui, évidement, ça fait appel à new XSLTProcessor() ... ->transformToXml()
      • [^] # Re: xsl:output

        Posté par  . Évalué à 2.

        Bon, j'ai fait quelques investigations, sans succès pour l'instant.
        Si ça peut servir à d'autres, la bonne version pour produire du xhtml depuis une feuille xsl doit contenir au moins ces éléments :


        <xsl:output method="xml"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"
        doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes"/>


        J'ai donc corrigé toutes mes feuilles de styles de façon à ce qu'elles contiennent ces lignes.
        Pensant que mon problème de doctype placé en plein milieu de ma feuille html provenait de l'instanciation multiple d'un objet parseur, j'ai modifié mes fonctions de telle sorte qu'elles ne crééent plus un objet grâce à la fonction xslt_create. Cet objet est maintenant sorti des fonctions, dans la session. Mais ça ne résoud pas mon problème pour autant.
        Je ne comprend pas pourquoi il me sort le doctype à chaque fois.
        Comme je n'appelle pas toujours les feuilles de styles dans le même ordre, ça me fait un peu ch... de modifier plus avant mes feuilles de style.

        Il doit donc bien y avoir une option quelque part pour que ce foutu parseur ne sorte pas la déclaration du doctype systématiquement, mais je n'ai toujours pas trouvé le mot magique à employer.

        Pour l'instant, les fonctions suivantes sont utilisées à chaque parsage de feuille xml :

        $_SESSION['xsltProcessor'] = new XSLTProcessor();
        $xml = new DomDocument;
        $xsl = new DomDocument;
        $xml->loadXML($args[$xml_arg]);
        $xsl->loadXML($args[$xsl_arg]);
        $xsltproc->importStyleSheet($xsl);
        $processed = $xsltproc->transformToXML($xml);
        if (!$processed)
        print ("Erreur XSLT ...");
        else
        print ($processed);

        Voilà... Si ça peut éclairer quelqu'un qui peut m'aider....

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.