在“方法”下,我编号为,但文本确实出现在编号为XSLT的旁边

问题描述:

因此,我一直在努力研究这一点,现在我有点迷路了。所以在方向底部,我有步骤,我已经编号了我的步骤,但由于某种原因,我的XML文本没有被转移。在“方法”下,我编号为<step>,但文本确实出现在编号为XSLT的旁边

这是XML文件

<recipeml> 
    <recipe> 
     <head> 
      <title>Coq au Riesling</title> 
     </head> 
     <ingredients> 
      <ing> 
      <amt> 
       <qty>30</qty> 
       <unit system="metric">ml</unit> 
      </amt> 
      <item>garlic-infused olive oil</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty>150</qty> 
       <unit system="metric" unit="g">gram(s)</unit> 
      </amt> 
      <item>bacon lardons</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty>1</qty> 
      </amt> 
      <item>leek(s)</item> 
      <prep>(finely sliced)</prep> 
      </ing> 
      <ing> 
      <amt> 
       <qty>12</qty> 
      </amt> 
      <item>chicken thighs (boneless and skinned)</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty>3</qty> 
      </amt> 
      <item>bay leaves</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty>300</qty> 
       <unit system="metric">gram(s)</unit> 
      </amt> 
      <item>oyster mushroom(s) (torn into strips)</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty>750</qty> 
       <unit system="metric">ml</unit> 
      </amt> 
      <item>Riesling</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty> 1</qty> 
       <unit>splash of</unit> 
      </amt> 
      <item>double cream (optional)</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty> 1</qty> 
       <unit>pinch of</unit> 
      </amt> 
      <item>salt</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty>1</qty> 
       <unit>pinch of </unit> 
      </amt> 
      <item>Pepper</item> 
      </ing> 
      <ing> 
      <amt> 
       <qty>1</qty> 
       <unit>tablespoon(s)</unit> 
      </amt> 
      <item>dill (chopped to serve (2 tablespoons if needed)) </item> 
      </ing> 
     </ingredients> 
     <directions> 
      <step> Heat the oil in a casserole or large, wide pan and fry the lardons until crisp.</step> 
      <step> Add the sliced leek and soften it with the lardons for a minute or so.</step> 
      <step> Cut chicken thighs into 2 or 3 pieces each, tip them into the pan with the bay leaves, torn mushrooms and wine. </step> 
      <step>Season with salt and pepper to taste and bring to the boil, cover the pan and simmer gently for 30-40 minutes, stirring in the double cream for the last couple of minutes if you want. </step> 
      <note> Like all stews, this tastes its mellowest best if you let it get cold and then reheat the next day. But it's no hardship to eat straight off. Whichever, serve sprinkled with dill and together with some buttered noodles.</note> 
     </directions> 
    </recipe> 
</recipeml> 

这将是我在我的XSLT文件

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:template match="ingredients"> 
    <h1>Ingredients</h1> 
    <xsl:text>&#10;</xsl:text> 
    <xsl:for-each select="ing"> 

     <p> 
      <xsl:choose> 
       <xsl:when test="prep"> 
        <xsl:text>&#10;</xsl:text> 
        <xsl:value-of select="amt/qty"/> 
        <xsl:text>&#10;</xsl:text> 
        <xsl:value-of select="amt/unit"/> 
        <xsl:text>&#10;</xsl:text> 
        <xsl:value-of select="item"/> 
        <xsl:text>&#10;</xsl:text> 
        <span style="font-style:italic"> 
         <xsl:value-of select="prep"/> 
        </span> 
        <xsl:text>&#10;</xsl:text> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:text>&#10;</xsl:text> 
        <xsl:value-of select="amt/qty"/> 
        <xsl:text>&#10;</xsl:text> 
        <xsl:value-of select="amt/unit"/> 
        <xsl:text>&#10;</xsl:text> 
        <xsl:value-of select="item"/> 
        <xsl:text>&#10;</xsl:text> 
       </xsl:otherwise> 
      </xsl:choose> 
     </p> 

    </xsl:for-each> 
</xsl:template> 

<xsl:template match="directions"> 
    <h2>Methods</h2> 
    <xsl:text>&#10;</xsl:text> 
    <xsl:for-each select="step"> 
     <xsl:number format="1."/> 
     <xsl:text>&#10;</xsl:text> 
    </xsl:for-each> 
    <xsl:value-of select="step"/> 
    <xsl:text> </xsl:text> 
    <p> 
     <xsl:value-of select="note"/> 
     <br/> 
    </p> 

</xsl:template> 
</xsl:stylesheet> 

现在发生的事情是,我希望有我的方向题为步骤进行编号和我确实让它们被编号,但由于某些原因,xml中的文本不会转移。我的地方,但不能完全肯定搞乱这里:(

这个逻辑

<xsl:for-each select="step"> 
    <xsl:number format="1."/> 
    <xsl:text>&#10;</xsl:text> 
</xsl:for-each> 
<xsl:value-of select="step"/> 

在XSLT 1.0和2.0中有不同的效果,并且你没有说明你正在使用哪个。但在这两种情况下,都是错误的。您为每个步骤输出一个数字,然后在最后考虑输出步骤的值。在XSLT 1.0中,xsl:value-of将输出第一步的内容,在2.0中它将输出所有步骤的值,以空格分隔。你真正想要的是这样的:

<xsl:for-each select="step"> 
    <xsl:number format="1."/> 
    <xsl:text>&#10;</xsl:text> 
    <xsl:value-of select="."/> 
</xsl:for-each> 
+0

这是能够解决这个问题,迈克尔。谢谢您的帮助。我正在做一些改变,但那是我无法弄清楚的一个问题。 – OC1092

由于目标格式似乎是HTML,我建议那些step转换且成HTML有序列表:

<xsl:template match="directions"> 
    <h2>Methods</h2> 
    <xsl:text>&#10;</xsl:text> 
    <ol> 
     <xsl:apply-templates select="step"/> 
    </ol> 

    <xsl:text> </xsl:text> 
    <p> 
     <xsl:value-of select="note"/> 
     <br/> 
    </p> 

</xsl:template> 

<xsl:template match="step"> 
    <li> 
     <xsl:apply-templates/> 
    </li> 
</xsl:template> 

这样,任何HTML用户代理渲染后的结果会照顾编号的step■找被转化为列表中的项目。