Page 1 sur 1

Lien dans XML -> Generation XSL-Fo

Posté : 11 févr. 2008, 22:16
par cf357
Bien l'bonsoir !
Me voilà pour une nouvelle question, côté XML cette fois.

Voilà j'ai un fichier XML avec du contenu de ce type là :

Code : Tout sélectionner

<root> <element> <content>Coucou venez <a href="foo">ici</a> !</content> </element> </root>

J'ai une feuille XSL qui me génère un fichier HTML. Pour gérer le lien je le met dans CDATA et ça marche. Par contre, pour générer un PDF, je ne sais pas comment faire pour mettre en forme ce lien.
J'utilise pour cela XSL-Fo, mais à l'affichage j'ai toujours "<a href="foo">ici</a>" (pas interprété, normal...)

Quelles sont les solutions pour rémédier au problème ?

Posté : 13 févr. 2008, 23:49
par sadeq
Ce que tu fais n'est pas conforme à la norme XML. Il ne faut pas intégrer de balises HTML dans la structure de données XML.

Voici comment normaliser tout ça par l'exemple :

Source XML: test.xml

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <!-- Document : test.xml Created on : 13 février 2008, 20:13 Author : sadeq Description: données imaginaires pour le test --> <root> <eleve> <nom>Dupont</nom> <prenom>Jean-pierre</prenom> <cv link="cv_jeanpierre_Dupont.htm">Consultez CV</cv> </eleve> <eleve> <nom>Durand</nom> <prenom>Aline</prenom> <cv link="cv_aline_Durand.htm">Consultez CV</cv> </eleve> <eleve> <nom>Leroy</nom> <prenom>Marc</prenom> <cv link="cv_marc_leroy.htm">Consultez CV</cv> </eleve> </root>
Présentation XSL: test.xsl

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <!-- Document : test.xsl Created on : 13 février 2008, 20:17 Author : sadeq Description: programme xsl affichant les données XML en HTML --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html"/> <xsl:template match="root"> <html> <head> <title>Liste des élèves</title> </head> <body> <h1>Liste des élèves</h1><hr /> <xsl:for-each select="eleve"> <p>Nom : <xsl:value-of select="nom" /></p> <p>Prénom : <xsl:value-of select="prenom" /></p> <xsl:for-each select="cv"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="@link" disable-output-escaping="yes" /> </xsl:attribute> <xsl:value-of select="." /> </xsl:element> </xsl:for-each> <hr /> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
Il suffit maintenant de faire le parsing Xml/Xsl pour obtenir HTML.

Posté : 14 févr. 2008, 00:42
par cf357
Tiens, c'est rigolo, je viens justement de -presque- finir un outil de gestion de CV basé sur XML ;)

La solution que tu proposes ne convient pas ici, car l'utilisateur pourra[it] décider de mettre des liens dans un champ texte, au beau milieu, sans que necessaire tout le contenu soit un texte... J'ai écrit une DTD parfaitement valide, et les documents XML répondent à cette DTD, mais je ne veux pas compliquer la vie de l'utilisateur.

Et la génération depuis XSL ne pose pas de problème, c'est juste que je cherche à éviter la solution du PCDATA, sans pour autant obliger l'utilisateur à écrire :

Code : Tout sélectionner

<root> <content> <description>bon bah voila un debut de</description> <description url="foo">texte coupé au milieu</description> <description>juste pour mettre un lien, et en reduisant la cohérence du contenu et des balises</description> </content> </root>
Merci d'avoir pris le temps de répondre, mais ça ne répond à ce que cherche :-(
Cette question est un vrai problème évoqué sur XMLFR et newsgroups associés, mais dans des topics peu récents, donc je ne sais pas si on a maintenant des "solutions miracles" ...

Donc si quelqu'un a une autre idée...