XSLT转换后缺少一些HTML标记

时间:2013-04-29 10:46:25

标签: xml xslt

我正在将一个简单的XML文档转换为HTML。输出中缺少某些标记,例如 ol h2 ,尽管它们存在于模板中且数据本身位于输出中。我使用Saxon 9来应用转换。

XML:

<?xml version="1.0"?>
<recipes>
    <recipe>
        <name>Gush'gosh</name>
        <ingredients>
            <ingredient>
                <qty>1</qty>
                <unit>pound</unit>
                <food>hamburger</food>
            </ingredient>
            <ingredient>
                <qty>1</qty>
                <unit>pound</unit>
                <food>elbow macaroni</food>
            </ingredient>
            <ingredient>
                <qty>2</qty>
                <unit>cups</unit>
                <food>brown sugar</food>
            </ingredient>
            <ingredient>
                <qty>1</qty>
                <unit>bag</unit>
                <food>chopped onions</food>
            </ingredient>
            <ingredient>
                <qty>1</qty>
                <unit>teaspoon</unit>
                <food>dried dill</food>
            </ingredient>
        </ingredients>
        <instructions>
            <instruction>Brown the hamburger.</instruction>
            <instruction>Add onions and cook until transparent.</instruction>
            <instruction>Add brown sugar and dill.</instruction>
            <instruction>Cook and drain pasta.</instruction>
            <instruction>Combine meat and pasta.</instruction>
        </instructions>
    </recipe>
    <recipe>
        <name>A balanced breakfast</name>
        <ingredients>
            <ingredient>
                <qty>1</qty>
                <unit>cup</unit>
                <food>cereal</food>
            </ingredient>
            <ingredient>
                <qty>1</qty>
                <unit>glass</unit>
                <food>orange juice</food>
            </ingredient>
            <ingredient>
                <qty>1</qty>
                <unit>cup</unit>
                <food>milk</food>
            </ingredient>
            <ingredient>
                <qty>2</qty>
                <unit>slices</unit>
                <food>toast</food>
            </ingredient>
        </ingredients>
        <instructions>
            <instruction>Combine cereal and milk in bowl.</instruction>
            <instruction>Add all ingredients to table.</instruction>
        </instructions>
    </recipe>
</recipes>

XSL:

<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="/">
        <html>
            <head>
                <title>Recipes</title>
            </head>
            <body>
                <xsl:apply-templates select="/recipes/recipe"/>
            </body>
        </html>
    </xsl:template>

    <xsl:template name="recipe">
        <h2>
            <xsl:value-of select="./name"/>
        </h2>
        <h3>Ingredients:</h3>
        <p>
            <!--<xsl:apply-templates select="./ingredients"/>-->
            <xsl:for-each select="./ingredients/ingredient">
                <xsl:value-of select="./qty"/><xsl:text> </xsl:text>
                <xsl:value-of select="./unit"/><xsl:text> </xsl:text>
                <xsl:value-of select="./food"/> <br/>
            </xsl:for-each>
        </p>
        <h3>Directions:</h3>
            <ol>
                <!--<xsl:apply-templates select="./instructions"/>-->
                <xsl:for-each select="./instructions/instruction">
                    <li> <xsl:value-of select="."/> </li>
                </xsl:for-each>
            </ol>
    </xsl:template>

1 个答案:

答案 0 :(得分:2)

这只是因为这一行......

<xsl:template name="recipe">

这意味着模板是一个名为模板的模板,只能使用 xsl:call-template 调用。但是,您在此处使用匹配模板,因此您需要像这样编写:

<xsl:template match="recipe">