entités xml

Eléphanteau du PHP | 38 Messages

14 déc. 2008, 17:48

Bonjour à tous,

j'ai un problème simple mais impossible de trouver une réponse : est-il possible de demander au parseur DOM de PHP de ne pas s'énerver dès qu'il voit une entité non-définie ?

J'ai bien peur que non, mais on ne sait jamais...

Merci d'avance.

Mammouth du PHP | 2937 Messages

14 déc. 2008, 18:09

Tu peux toujours encadrer le contenu de l'élément XML contenant l'entité incriminée par les balises CDATA, comme suit :

Code : Tout sélectionner

<?xml version="1.0"?> <racine> <element><![CDATA[Le contenu de l'élément avec une entité représentant l'espace insécable&nbsp;: en effet, on comprend l'utilité des balises CDATA permettant le lever l'ambiguïté sur les entités autres que celle prévues par XML (comme &, < ou >)]]></element> </racine>

Eléphanteau du PHP | 38 Messages

14 déc. 2008, 20:05

Hum, je ne me suis pas expliqué comme il le fallait : ces entités sont importantes, en l'occurrence il s'agit de MathML, donc j'aimerai qu'elles soient interprétées par le navigateur.

Conclusion je ne peux pas les échapper (sinon j'aurai juste remplacé les & par des &).

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Mammouth du PHP | 2937 Messages

15 déc. 2008, 17:30

en l'occurrence il s'agit de MathML, donc j'aimerai qu'elles soient interprétées par le navigateur.
Pour que le MathML soit interprété correctement par le navigateur, il faut, d'une part, renseigner le doctype MathML et, d'autre part, déclarer l'espace de nom de MathML.

Pour un document ne contenant que du MathML, on procédera ainsi :

Code : Tout sélectionner

<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd"> <math xmlns="http://www.w3.org/1998/Math/MathML"> <!-- Ici ton code MathML --> </math>
Si le MathML doit être produit dans un document XHTML, seul l'espace de nom doit être déclaré :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>XHTML + MathML</title> </head> <body> <p>Un peu de code XHTML</p> <math xmlns="http://www.w3.org/1998/Math/MathML"> <!-- Ici ton code MathML --> </math> </body> </html>
Encore faut-il que le navigateur sache ce qu'est le MathML...

Eléphanteau du PHP | 38 Messages

15 déc. 2008, 21:15

Certes, mais mon problème c'est que si les entités se retrouvent dans des sections CDATA elles ne seront plus interprétées en tant qu'entités MathML...

En gros mon problème c'est que je dois charger avec PHP du xml avec des entités non déclarées (pour diverses raisosn il m'est difficile d'avoir la doctype lors du DOM::load) et qu'il ne veut pas...

Et la solution CDATA ne me va pas car ces entités non déclarées sont potentiellement interprétées ensuite (par ex du MathML que je vais après divers transit finir par afficher sur un navigateur)

Donc voilà, mon problème est bien d'obtenir du parser PHP qu'il me charge ces entités non définies sans râler.

Mais j'ai beau regarder la référence sur php.net je n'ai pas l'impression que ce soit possible, je vais donc probablement devoir trouver un moyen d'avoir la doctype lors du Dom::load :/

Mammouth du PHP | 2937 Messages

15 déc. 2008, 22:18

Le DOM XML de PHP permet de tenir compte des espaces de nom. Tu devrais essayer de creuser cette voie-là.

Eléphant du PHP | 217 Messages

16 déc. 2008, 08:05

Bonjour,
je pense qu'en passant le membre DOMDocument::resolveExternals à true devrait résoudre le problème en permettant de charger la DTD.