2013-04-29 83 views
0

我正在将简单的XML文档转换为HTML。某些标记(如olh2)从输出中丢失,虽然它们出现在模板中,并且数据本身在输出中。我使用Saxon 9来应用转换。XSLT转换后缺少一些HTML标签

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> 

回答

2

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

<xsl:template name="recipe"> 

这意味着模板是命名模板化,可以o只能用xsl:呼叫模板来呼叫。但是,您在此处使用的是匹配模板,因此您需要像这样编写它:

<xsl:template match="recipe"> 
+0

谢谢!我完全错过了它。 – damluar 2013-04-29 18:10:24