2017-10-22 45 views
0

因此,我一直在努力研究這一點,現在我有點迷路了。所以在方向底部,我有步驟,我已經編號了我的步驟,但由於某種原因,我的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中的文本不會轉移。我的地方,但不能完全肯定搞亂這裏:(

回答

0

這個邏輯

<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

0

由於目標格式似乎是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■找被轉化爲列表中的項目。