2014-07-09 4 views
2

Je possède un document XML comme ceci:italique/gras avec XSLT en HTML

<bibliography> 
    <element1> 
     <text> 
      Some text and <italic>italic Text</italic> and <bold>bold text</bold> 
     </text> 
    </element1> 
    <element2> 
     <text> 
      Some text and <italic>italic Text</italic> and <bold>bold text</bold> 
     </text> 
    </element2> 
</bibliography> 

Cela fonctionne, mais ne XSL pas de format <italic> ou <bold> tags.

<xsl:template match="/"> 
     <html> 
      <head> 
       <title>Bibliographie</title> 
       <style type="text/css"> 
       .entry { 
        font-family: Georgia 
       } 
      </style> 
      </head> 
      <body> 
       <xsl:apply-templates/> 
     </body> 
    </html> 
</xsl:template> 

<xsl:template match="/bibliography/*"> 
    <p> 
     <div class="entry{@type}"> 
    [<xsl:number count="*"/>] 
    <xsl:apply-templates/> 
     </div> 
    </p> 
</xsl:template> 

Que dois-je ajouter à laisser formater les <italic> et <bold> tags pour HTML? Je l'ai essayé avec XSL-FO mais il semble que je ne puisse pas exporter les objets en HTML, juste en PDF.

Répondre

3

Vous avez posé une question similaire à propos de la sortie de xsl-fo. Le principal est le même pour le HTML, mais il suffit de sortir les balises HTML au lieu des balises xsl-fo.

La question principale pour laquelle vous XSLT ne fonctionne pas parce que vous n'avez pas des modèles correspondant soit gras ou italic

Essayez cette XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes"/> 

    <xsl:template match="bibliography"> 
     <html> 
      <head> 
       <title>Bibliographie</title> 
       <style type="text/css"> 
       .entry { 
        font-family: Georgia 
       } 
      </style> 
      </head> 
      <body> 
       <xsl:apply-templates /> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="bibliography/*"> 
     <div class="entry{@type}"> 
      [<xsl:number count="*"/>] 
      <xsl:apply-templates/> 
     </div> 
    </xsl:template> 

    <xsl:template match="bibliography/*/*" priority="0"> 
     <p> 
      <xsl:apply-templates/> 
     </p> 
    </xsl:template> 

    <xsl:template match="text"> 
     <xsl:apply-templates/> 
    </xsl:template> 

    <xsl:template match="bold"> 
     <span style="font-weight:bold;"> 
      <xsl:apply-templates/> 
     </span> 
    </xsl:template> 

    <xsl:template match="italic"> 
     <span style="font-style:italic;"> 
      <xsl:apply-templates /> 
     </span> 
    </xsl:template> 
</xsl:stylesheet> 

pas l'utilisation de " priorité "sur l'un des modèles

<xsl:template match="bibliography/*/*" priority="0"> 

Cela agit comme une sorte de" fourre-tout "tem plaque pour les éléments correspondants lorsque vous n'avez pas de modèles spécifiques. La priorité est nécessaire pour s'assurer qu'elle ne soit pas appliquée avant les modèles correspondant à "italique" et "gras" par exemple. Si vous avez d'autres éléments que vous souhaitez formater de manière spécifique, tels que "auteur", ajoutez simplement un modèle spécifique pour eux.

+0

D'une certaine manière, cela ne fonctionne pas pour moi. Ceci est mon fichier XML: [link] (http://pastebin.com/LLG1RC2w) et mon XSLT de votre part: [link] (http://pastebin.com/ksJ847rb) Il semble que ce soit le bon code HTML, mais le formatage est horrible. C'est la sortie dans mon navigateur (firefox): [link] (http://s14.directupload.net/images/140710/gprtr6ol.png) – Peter

+0

J'ai oublié de dire qu'il y a plusieurs éléments qui peuvent contenir '' tags. Désolé pour ça. Que dois-je changer pour donner tous les éléments d'un paragraphe contenant tous les éléments ci-dessous avec les balises ' '? – Peter

+0

et mon fichier XSD: [link] (http://pastebin.com/1LUUYsj0) – Peter