如果有人愿意告诉我为什么以下<xsl:call-template name="Log">
无法工作?
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 ></h2>
<p>
<xsl:call-template name="Log">
</xsl:call-template>
</p>
</body>
</html>
</xsl:template>
<xsl:template name ="Log">
<xsl:variable name="break"><br/></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"><br/></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 :(得分:0)
添加行
<xsl:stylesheet... >
在My CD Collection >
[Step]
Step ID: 1
Description
行之后直接到你的XSLT文件,你将得到(部分期望的)
的结果<h2>My CD Collection ></h2>
对于“部分”,我确实引用了第一行 - 您明确希望通过在XSLT中包含$this->Auth->unauthorizedRedirect = false,
来输出 - 但在输出文本中没有提及。
答案 1 :(得分:0)
如果我猜对了,你想改变:
<xsl:template name ="Log">
<xsl:variable name="break"><br/></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>
注意:
您永远不必使用像<br/>
这样的黑客来输出HTML或XML有效标记;
我不确定您为什么需要在此处调用命名模板,而不是仅在第一个模板中包含xsl:for-each
,或者只是将模板应用于Message
元素。