2017-02-10 78 views
-1

如果有人願意告訴我爲什麼以下<xsl:call-template name="Log">不起作用?HTML中的XSLT調用模板

XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<TextMessages> 
    <Message>[Step]</Message> 
    <Message>Step ID: 1</Message> 
    <Message>Description</Message> 
</TextMessages> 

XSLT文件:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="yes"/> 
<xsl:template match="/"> 
<html> 
    <body> 
    <h2>My CD Collection &gt;</h2> 
    <p> 
     <xsl:call-template name="Log"> 
     </xsl:call-template> 
    </p> 
    </body> 
</html> 
</xsl:template> 

<xsl:template name ="Log"> 
    <xsl:variable name="break">&lt;br/&gt;</xsl:variable> 
    <xsl:for-each select="TextMessages"> 
     <p> 
     <xsl:value-of select="."/> 
     <xsl:value-of select="$break"/> 
     </p> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

的希望輸出:

My CD Collection > 
[Step]<br/> 
Step ID: 1<br/> 
Description<br/> 

真正的問題也有我與調用參數,但不知道如果那是問題。

<p> 
    <xsl:call-template name="Log"> 
    <xsl:with-param name="testId" select="@testId" /> 
    </xsl:call-template> 
</p> 

<xsl:template name ="Log"> 
    <xsl:param name="testId" /> 
    <xsl:variable name="break">&lt;br/&gt;</xsl:variable> 
    <xsl:for-each select="/t:TestRun/t:Results/t:UnitTestResult[@testId=$testId]/t:Output/t:TextMessages/t:Message"> 
     <p> 
     <xsl:value-of select="."/> 
     <xsl:value-of select="$break"/> 
     </p> 
    </xsl:for-each> 
    </xsl:template> 
+0

什麼不行?它適用於我的xsltproc .. – user993553

+0

@ user993553我認爲w3c是可行的xsl測試,但它在那裏失敗。結果只是寫在一行,沒有模板的工作。 但是,使用http://www.freeformatter.com/xsl-transformer.html#ad-output進行測試,並且看起來像是在工作。 但是,底部仍然不能在我的代碼中工作。 – Emir

+0

請將預期結果**顯示爲代碼**。 –

回答

0

如果我猜測正確,你想改變:

<xsl:template name ="Log"> 
    <xsl:variable name="break">&lt;br/&gt;</xsl:variable> 
    <xsl:for-each select="TextMessages"> 
     <p> 
     <xsl:value-of select="."/> 
     <xsl:value-of select="$break"/> 
     </p> 
    </xsl:for-each> 
</xsl:template> 

到:

<xsl:template name="Log"> 
    <xsl:for-each select="TextMessages/Message"> 
     <p> 
      <xsl:value-of select="."/> 
     </p> 
     <hr/> 
    </xsl:for-each> 
</xsl:template> 

注:

  1. 你不應該使用像&lt;br/&gt;這樣的黑客來輸出HTML或XM L有效標記;

  2. 我不知道爲什麼你需要在這裏調用一個命名模板,而不是簡單地在第一個模板中包含xsl:for-each,或者只是將模板應用到Message元素。

+0

感謝您的第二次注意,我刪除了整個模板並直接添加了'xsl:for-each',從而使其完美運行。 – Emir

0

<xsl:stylesheet... >線將你的

My CD Collection > 
[Step] 
Step ID: 1 
Description 

隨着(部分需要)的結果爲 「部分」 我是指後直接添加行

<xsl:output method="text" version="1.0" encoding="UTF-8" /> 

到XSLT文件第一行 - 您明確希望通過在您的XSLT中包含<h2>My CD Collection &gt;</h2>來輸出,但在輸出文本中未提及。

+0

我現在有''並將它改爲文字不會幫助我。 P.S.編輯想要的輸出,謝謝你的提示。 – Emir

+0

@Emir:對不起,但我不會在XSLT代碼中讀取該行。請將它添加到您的問題以及_full_所需的輸出。 – zx485