2017-02-10 41 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