Aller au contenu | Aller au menu | Aller à la recherche


XML XSL PHP

XML est un langage permettant l'échange de données entre applications. Couplé avec un XSL, le XSLT (T pour Transformation) vous générera un résultat formaté comme par exemple une page dont le contenu est un HTML et non plus un XML brut.

Ainsi avec un navigateur on peut afficher un HTML basé sur un XML + XSL.

Attention, certains navigateurs embarqués sur les PDA n'en sont pas encore capables, pour cela vous devrez utiliser des outils PHP ou autre qui parsent votre XML et formatent le résultat selon le XSL avant de l'afficher en HTML à destination du client.

PHP 5 inclut l'extension XSL par défaut. PHP 5 ne fournit plus qu'une et une seule manière uniforme, basée sur la libxslt, la classe XSLTProcessor.

XSLT (Extensible Stylesheet Language (XSL) Transformations) est un langage de transformation des documents XML.

Tips

Remplir en complétant une balise input ou autre

Au final votre code html ressemblera a ceci :

<input type="hidden" name="id"><xsl:attribute name="value"><xsl:value-of select="$id" /></xsl:attribute></input>

pour le résultat :

<input type="hidden" name="id" value="123" />

Les accents

HTML ISO-8859-1 Reference
Character 	Entity Number 	Entity Name 	Description
é 	&#233; 	&eacute; 	petit e, accent aigu
HTML et entités nommées

Le processeur XSLT signale l'erreur suivante : the entity "eacute" was referenced but not declared.
En XML, seules les entités &amp;, &lt; et &gt; sont connues. Ainsi, pour générer la sortie "&eacute;", on peut écrire : "&amp;eacute;"

Une autre solution est de déclarer des entités nommées (les nombres suivant &# sont les codes ascii-étendu des caractères correspondant)

<!DOCTYPE xsl:stylesheet [
   <!ENTITY eacute "&#233;">
   <!ENTITY egrave "&#232;">
   ...
]>

Concernant les "php don't replace ENTITY DOCTYPE xsl:stylesheet"

$xsl = new DOMDocument;
   $xsl->substituteEntities = true;    // ligne ajoutée pour la prise en charge des ENTITY du DOCTYPE xsl:stylesheet.
   $xsl->load('collection.xsl');

Et la classe DOMDocument pour les options telles que :

// $doc->resolveExternals : Définissez-le à TRUE pour charger des entités externes depuis la déclaration doctype. C'est utile pour inclure des entités dans vos documents XML.
$doc->substituteEntities = true; // Propriétaire. Si l'on doit ou non substituer les entités. Cet attribut ne fait pas parti de la spécification DOM et est spécifique à libxml. Par exemple : <!ENTITY eacute	"&#233;"> &eacute;
$doc->preserveWhiteSpace = false;	// A false marque les tabulations : Ne pas supprimer les espaces redondants. Vaut par défaut TRUE.
$doc->formatOutput = true;	// A true marque les tabulations : Formate la sortie avec une jolie indentation et des espaces supplémentaires

Alternativement pour l'inclusion des dépendances externes (des autre fichiers inclus : <xsl:include href="fichier2.xsl"/>) voyez :

libxml_disable_entity_loader(false);
// libxml_disable_entity_loader(true);	// Warning: DOMDocument::load(): I/O warning : failed to load external entity "D:\xsl/fichier2.xsl"

Ressources

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet