0

I'm transforming a simple XML document into HTML. Some of the tags such as ol and h2 are missing from the output, although they present in the template and the data itself is in the output. I use Saxon 9 to apply the transformation.

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

1 回答 1

2

这仅仅是因为这里的这条线......

<xsl:template name="recipe">

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

<xsl:template match="recipe">
于 2013-04-29T11:52:36.150 回答