使用XSLT格式以斜体/粗体格式化为HTML

时间:2014-07-09 20:26:44

标签: html xml xslt

我有一个像这样的XML文档:

<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>

此XSL有效但不格式化<italic><bold>标记。          

<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>

我需要添加什么才能让它格式化HTML的<italic><bold>标记? 我尝试使用XSL-FO,但似乎我无法将对象导出为HTML,只是导出为PDF。

1 个答案:

答案 0 :(得分:4)

您已经提出了有关输出xsl-fo的类似问题。 HTML的主体是相同的,但只输出HTML标签而不是xsl-fo的标签。

XSLT无法正常工作的主要问题是因为您还没有匹配粗体斜体

的模板

试试这个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>

不使用&#34;优先级&#34;在其中一个模板上

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

这可以作为一种全面的&#34;全能的&#34;用于匹配您没有特定模板的元素的模板。需要优先考虑以确保它不会在模板匹配之前得到应用&#34;斜体&#34;和&#34;大胆&#34;例如。如果您想要以特定方式格式化其他元素,例如&#34; author&#34;,只需为它们添加特定模板。