Entités externes et php

131
Eléphanteau du PHP | 45 Messages

01 févr. 2007, 19:22

Bonjour
Je me demandais s'il etait possible à php de resoudre les entitées externes en parsant un fichier XML.

J'aimerais par exemple pouvoir avoir un fichier XSL avec le texte marqué en entité

Code : Tout sélectionner

<b>&titre;</b>
Mettre dans mon entete doctype SYSTEM lang.dtd
et que le resultat de ma transformation soit bien
<b>Titre de ma page</b>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

01 févr. 2007, 19:42

Si tout tes fichiers lang.dtd respectent et implémentent l'intégralité des entités de ton fichiers XML, c'est effectivement possible ;)

Lors de l'affichage de ton XML, les entités devraient être remplacées par la correspondance dans la DTD.

Je me demande juste s'il ne vaudrait pas mieux créer 2 DTD : une pour le formalisme du document, une autre pour les entités. Comme ça, tu ne doublonnes pas trop les données :-k
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

131
Eléphanteau du PHP | 45 Messages

02 févr. 2007, 10:56

Si tout tes fichiers lang.dtd respectent et implémentent l'intégralité des entités de ton fichiers XML, c'est effectivement possible ;)

Lors de l'affichage de ton XML, les entités devraient être remplacées par la correspondance dans la DTD.

Je me demande juste s'il ne vaudrait pas mieux créer 2 DTD : une pour le formalisme du document, une autre pour les entités. Comme ça, tu ne doublonnes pas trop les données :-k
Merci pour ta réponse.
J'ai bien conscience qu'il soit nécessaire d'utiliser deux DTD - idéalement X fichiers ( liés via des inclusions internes ( head.dtd, container.dtd ... ) + 1 dtd lang.

Mon probleme se trouve en fait vis à vis de php.
Je n'arrive pas à charger de dtd externes au sein de ma feuille XSLT ( Entity not defined ... ), la transformation FFox produit le même résultat, quand IE 7 semble ne recontrer aucun probleme.

L'interet d'une DTD multilangue est biensur de pouvoir moduler et séparer mes données, s'il m'est imposé de declarer mes ENTITY au sein même de mon document, je n'y gagne rien.

Ce qui est étrange, c'est que le chargement de document( externes marche tres bien lors des transformations.

j'ai donc trouvé une solution paliative qui dans son idée rend ainsi

Code : Tout sélectionner

langs/about_en.xml <?xml version="1.0"?> <lang> <descr>this is about</descr> <bo>this id the bo</bo> </lang>

Code : Tout sélectionner

<?xml version="1.0"?> <stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:htm="http://www.w3.org/1999/xhtml"> <output method="html" encoding="ISO-8859-1" indent="yes" /> <variable name="lang" select="document('lang/about_fr.xml')/lang"/> <template match='/root'> <htm:body> <htm:b><value-of select="$lang/bo"/></htm:b> Liste des news : </htm:body> </template> </stylesheet>
Mais même ecrit de la plus simple facon, <value-of select="$lang/bo"/> reste toujours plus long que &bo;

Pourriez vous m'indiquer une portion de code qui fonctionnerait ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 févr. 2007, 12:20

Normalement, il n'y a pas de code spécifique à l'intégration d'une DTD dans un XML. :-k

La seule règle à suivre est l'inclusion de la DTD dans le fichier XML.

Est-ce que tu intègres plusieurs DTD dans le fichier XML ou est-ce que les différentes inclusions de DTD se font dans les différentes DTD ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer