我创建了一个这样的模板:
<xsl:template name="loop">
<xsl:param name="yeni"></xsl:param>
<xsl:choose>
<xsl:when test="$yeni !=''">
<span style="color:#ff0000">
<br/>
<xsl:value-of select="$yeni"/>
</span>
<xsl:call-template name="loop">
<xsl:with-param name="yeni" select="substring($yeni,2)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:text>I am out of the loop</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
我可以在某个地方调用它并且它可以工作。但是我想从这个代码中调用它xslt设计崩溃了。为什么我无法在<xsl:template match="//n1:Invoice/cac:InvoiceLine">
此模板中调用
<xsl:template match="//n1:Invoice/cac:InvoiceLine">
<tr>
<td id="lineTableTd" align="right">
<xsl:template match="/">
<xsl:call-template name="loop">
<xsl:with-param name="yeni">"hello"</xsl:with-param>
</xsl:call-template>
</xsl:template>
</td>
</tr>
答案 0 :(得分:2)
如果你查看当前的代码......
<xsl:template match="//n1:Invoice/cac:InvoiceLine">
<tr>
<td id="lineTableTd" align="right">
<xsl:template match="/">
<xsl:call-template name="loop">
<xsl:with-param name="yeni">"hello"</xsl:with-param>
</xsl:call-template>
</xsl:template>
</td>
</tr>
</xsl:template>
您有 xsl:template 嵌套在另一个 xsl:template 中的问题,这是不允许的。它应该看起来像这样
<xsl:template match="n1:Invoice/cac:InvoiceLine">
<tr>
<td id="lineTableTd" align="right">
<xsl:call-template name="loop">
<xsl:with-param name="yeni">"hello"</xsl:with-param>
</xsl:call-template>
</td>
</tr>
</xsl:template>
(注意,在模板匹配开始时你也不需要//
)
这会给你以下输出
<span style="color:#ff0000"><br/>"hello"</span>
<span style="color:#ff0000"><br/>hello"</span>
<span style="color:#ff0000"><br/>ello"</span>
<span style="color:#ff0000"><br/>llo"</span>
<span style="color:#ff0000"><br/>lo"</span>
<span style="color:#ff0000"><br/>o"</span>
<span style="color:#ff0000"><br/>"</span>
I am out of the loop
您可能需要更改&#34;循环中的<xsl:value-of select="$yeni"/>
&#34;模板只有<xsl:value-of select="substring($yeni, 1, 1)"/>
。也有可能你实际上并不需要引用标记&#34;你好&#34;在这个例子中
<xsl:with-param name="yeni">hello</xsl:with-param>
如果你这样做,你只需要引号(以阻止它寻找名为&#34的元素;你好&#34;)。
<xsl:with-param name="yeni" select='"hello"' />
另外,如果您希望按特定字符串拆分某些文本,可以使用类似的方法。您可以使用&#34;包含&#34;用于检查字符串是否包含其他字符串的函数。如果是这样,你会使用&#34; substring-before&#34;输出第一位,然后递归调用&#34;循环&#34;模板使用&#34; substring-after&#34;。