xml
<block4>
<tag>
<name>50K</name>
<value>
0501/045788775099
Praveen // name will come
MENENDEZ Y PELAYOA CORUNA SPA // address will come
</value>
</tag>
</block4>
我已经为上面的标签编写了xslt,但我遇到了用空格替换剩余长度的问题您可以在中间行praveen中看到的上述值是存在的,让我们假设我们收到的另一条xml消息praveen可能会收到Tom,但最大长度是35所以我们需要计算字符串名称值的剩余长度,我们应该用SPACE替换,所以我不知道如何替换那里的空格。。。
xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select ="block4/tag[name = '50K']">
<xsl:value-of select="concat(substring(value, 1, 5), ',',substring(substring- before(value,' '),6), ',',substring-after(value,' '))" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
预期OUPUT lIKE:
0501/,045788775099,普拉文。。。。。。。。。。。。。。。。。。。。。。。。。。。。MENENDEZ Y PELAYOA CORUNA SPA
其中点表示空间不要假设点为
我需要那里的空间,假设praveen是7个字符,剩下的28个字符应该在xslt 中腾出空间
尝试使用
<xsl:text> </xsl:text>
空格在这些标签之间。
有关更多信息:XSLT控制空白
让我们假设这个xml消息我们收到了另一封信我们可能会收到汤姆的消息,但是最大长度是35,所以我们需要计算字符串名称值我们应该替换的剩余长度使用SPACE,所以我不知道如何替换那边的空间。。。
使用:
substring(concat($vstr, $vBlanks35), 1, 35)
这将计算出将$vstr
("Raveen")与$vBlanks35
(35个空格)连接起来,然后取开始的35个字符的结果。
这里有一个完整的例子:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vstr" select="'Praveen'"/>
<xsl:variable name="vBlanks35" select=
"' '"/>
<xsl:template match="/">
"<xsl:value-of select=
"substring(concat($vstr, $vBlanks35), 1, 35)"/>"
</xsl:template>
</xsl:stylesheet>
当将此转换应用于任何XML文档(未使用)时,将生成所需的正确结果:
"Praveen "
在xml中添加空间的一种(通用)方法是使用保留空间的特殊xml属性:
<value xml:space="preserve">
your
values
here ...
</value>
另一种方法是使用XSL的保留/剥离空间。。。
您应该使用SQL函数RPAD:的XSLT版本
<xsl:template name="rpad">
<xsl:param name="text" />
<xsl:param name="length" />
<xsl:param name="char" select="' '" />
<xsl:if test="$length > 0 and string-length($text) > 0">
<xsl:value-of select="$text" />
<xsl:call-template name="rpad">
<xsl:with-param name="text" select="$char" />
<xsl:with-param name="char" select="$char" />
<xsl:with-param name="length" select="$length - string-length($text)" />
</xsl:call-template>
</xsl:if>
</xsl:template>
用法:
<xsl:call-template name="rpad">
<xsl:with-param name="text" select="'your string here'" />
<xsl:with-param name="length" select="35" />
</xsl:call-template>
可选地,您可以指定一个char参数来用空格以外的字符填充字符串。