您好我需要翻译/转换/替换
'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ''1234567891011121314151617181920212223242526'
first i am translating
<xsl:variable name="lowercase2uppercase"
select="translate($mystring,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
这里我需要将'ABCDEFGHIJKLMNOPQRSTUVWXYZ'翻译成'1234567891011121314151617181920212223242526'。 例如字母'A','B'到'Z'i正在翻译这样
<xsl:when test="$letter='A'">
<xsl:attribute name="letter">01</xsl:attribute>
</xsl:when>
<xsl:when test="$letter='B'">
<xsl:attribute name="letter">02</xsl:attribute>
</xsl:when>
<xsl:when test="$letter='j'">
<xsl:attribute name="letter">10</xsl:attribute>
</xsl:when>
.........## Heading ##
<xsl:when test="$letter='Z'">
<xsl:attribute name="letter">26</xsl:attribute>
</xsl:when>
在这里,我可以这样做,但解决方案太冗长了,我需要一个通用的解决方案来使用XSLT替换[A-Z]和[1-26]。
请帮我 。
如果my $letter
为'j'
,那么't'
同样给予00而不是10,而是给出10而不是20。
答案 0 :(得分:3)
如何使用此功能?
normalize-space(concat(
translate($letter, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'00000000011111111112222222'),
translate($letter, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'12345678901234567890123456')))
它仍然非常简洁,它可以满足您的需求。 : - )
答案 1 :(得分:2)
好吧,如果你定义一个变量,就像这样......
<xsl:variable name="replace" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
然后你可以简化翻译&#39;一封信,就像这样
<xsl:value-of select="string-length(substring-before($replace, $letter)) + 1" />
要在整个字符串上执行此操作,您将使用递归模板,一次替换一个字母。
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="replace" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:template match="word" >
<xsl:copy>
<xsl:call-template name="translate">
<xsl:with-param name="text" select="." />
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="translate">
<xsl:param name="text" />
<xsl:if test="$text != ''">
<xsl:variable name="letter" select="substring($text, 1, 1)" />
<xsl:value-of select="string-length(substring-before($replace, $letter)) + 1" />
<xsl:call-template name="translate">
<xsl:with-param name="text" select="substring($text, 2, string-length($text) -1 )" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
应用于此XML
<word>ABCDEFGHIJKLMNOPQRSTUVWXYZ</word>
以下是输出
<word>1234567891011121314151617181920212223242526</word>