我正在将一个简单的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>
答案 0 :(得分:2)
这只是因为这一行......
<xsl:template name="recipe">
这意味着模板是一个名为模板的模板,只能使用 xsl:call-template 调用。但是,您在此处使用匹配模板,因此您需要像这样编写:
<xsl:template match="recipe">