我对xsl还是很陌生,只需要完成此部分即可完成一个项目。因此,我认为有人可以解决这个问题,而不是进行大量测试和失败。我知道用其他语言编程,所以我想这对某些人来说很简单?
这就是问题所在。 我有看起来像这样的模板:
<xsl:template name ="TemplateName1">
<xsl:param name ="ParmId1"/>
<cbc:Element1>
<xsl:choose>
<xsl:when test="$ParmId1= 'N15'">Net per 15 days</xsl:when>
<xsl:when test="$ParmId1= '15'">Net per 15 days</xsl:when>
</xsl:choose>
</cbc:Element1>
</xsl:template>
我想要的是更动态的方法。我知道参数将以字母开头,然后是数字,或者只是数字。只能是1-2位数字。我希望结果像这样: “每“参数”天的净收入”
如果仅参数不是以字母开头,那么我需要更改$ ParmId1以删除第一个字符。
*更新: 第一个字母始终是字母“ N”-例如:4,N4、30,N30。
感谢所有帮助。
答案 0 :(得分:1)
如果您的参数与表达式^N?[1234567890]+$
相匹配,则可以使用translate
XPath函数:
translate($ParmId1,'N','')
此简单操作从字符串中删除N
字符的任何可能出现。较新版本的XPath / XSLT中提供了更复杂的解决方案
答案 1 :(得分:0)
假设输入为:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Result>N30</Result>
</root>
实现您指定的目标的 XSLT 1.0 解决方案可以是:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="/root">
<xsl:call-template name="TemplateName1">
<xsl:with-param name="ParmId1" select="Result"/>
</xsl:call-template>
</xsl:template>
<xsl:template name ="TemplateName1">
<xsl:param name ="ParmId1"/>
<cbc:Element1>
<xsl:choose>
<xsl:when test="starts-with($ParmId1, 'N')">Net per <xsl:value-of select="substring-after($ParmId1,'N')" /> days</xsl:when>
<xsl:otherwise>Net per <xsl:value-of select="$ParmId1" /> days</xsl:otherwise>
</xsl:choose>
</cbc:Element1>
</xsl:template>
</xsl:stylesheet>