如何对元素 XSL 进行两次转换
How make two transformations for an element XSL
我正在学习 XSL,如果可能的话,我希望一个元素可以进行 2 次转换。
这是元素:
<xsl:template match="//ns:text[@type='TEXT']">
<xsl:call-template name="break"/>
</xsl:template>
这是第一个转换和一段代码:
<xsl:template name="break">
<xsl:param name="text" select="string(.)"/>
<xsl:choose>
<xsl:when test="contains($text, '
')">
<xsl:if test="substring-before($text, '
') != ''">
<p>
<xsl:value-of select="substring-before($text, '
')"/>
</p>
</xsl:if>
<xsl:call-template name="break">
<xsl:with-param name="text" select="substring-after($text, '
')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<p>
<xsl:value-of select="$text"/>
</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
对于第二次转换,我想用translate()方法替换一些字符。
但是,请问,我该怎么做才能使用 break call-template 离开第一个转换,同时将 translate ?
在此先感谢您的帮助,
此致。
我认为执行翻译的最有效点是在调用分词模板时——这样调用看起来像这样:
<xsl:template match="ns:text[@type='TEXT']">
<xsl:call-template name="break">
<xsl:with-param name="text" select="translate(., 'abc', 'xyz')"/>
</xsl:call-template>
</xsl:template>
然后,在调用的模板中,您需要更改:
<xsl:param name="text" select="string(.)"/>
至:
<xsl:param name="text"/>
虽然如果你不这样做,它应该也能正常工作。
或者,您可以修改标记化模板,使其仅在一个地方写入输出(参见示例 )。然后在此时执行翻译。
未测试,因为没有提供测试示例。
我正在学习 XSL,如果可能的话,我希望一个元素可以进行 2 次转换。
这是元素:
<xsl:template match="//ns:text[@type='TEXT']">
<xsl:call-template name="break"/>
</xsl:template>
这是第一个转换和一段代码:
<xsl:template name="break">
<xsl:param name="text" select="string(.)"/>
<xsl:choose>
<xsl:when test="contains($text, '
')">
<xsl:if test="substring-before($text, '
') != ''">
<p>
<xsl:value-of select="substring-before($text, '
')"/>
</p>
</xsl:if>
<xsl:call-template name="break">
<xsl:with-param name="text" select="substring-after($text, '
')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<p>
<xsl:value-of select="$text"/>
</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
对于第二次转换,我想用translate()方法替换一些字符。
但是,请问,我该怎么做才能使用 break call-template 离开第一个转换,同时将 translate ?
在此先感谢您的帮助,
此致。
我认为执行翻译的最有效点是在调用分词模板时——这样调用看起来像这样:
<xsl:template match="ns:text[@type='TEXT']">
<xsl:call-template name="break">
<xsl:with-param name="text" select="translate(., 'abc', 'xyz')"/>
</xsl:call-template>
</xsl:template>
然后,在调用的模板中,您需要更改:
<xsl:param name="text" select="string(.)"/>
至:
<xsl:param name="text"/>
虽然如果你不这样做,它应该也能正常工作。
或者,您可以修改标记化模板,使其仅在一个地方写入输出(参见示例
未测试,因为没有提供测试示例。