我想使用XSL 1.0版填充额外空间(任何字符)的数据。
Name field max chars length is 10 (length must be dyanamic) chars.
Need to transfer data using XSL.
In XML:
<emp>
<name>Test</name>
</emp>
Expected Output :
<emp>
<name>Test******</name>
</emp>
Please let me know if anyone have any solution.
Thanks in advance.
答案 0 :(得分:3)
尝试:
substring(concat($yourstring, '**********'), 1, 10)
使用输入的示例:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="name">
<xsl:copy>
<xsl:value-of select="substring(concat(., '**********'), 1, 10)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>结果强>
<?xml version="1.0" encoding="UTF-8"?>
<emp>
<name>Test******</name>
</emp>
或者,如果您的处理器支持它,您可以使用EXSLT str:align()函数 - 可能与str:padding()函数一起动态创建填充字符串。
答案 1 :(得分:0)
**Input.xml**
<?xml version="1.0"?>
<Data>
<text>1234567</text>
</Data>
**StringPadding.xsl**
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:template match="/Data"><xsl:variable name="new-str" select="//Data/text"></xsl:variable>
After Padding= <xsl:call-template name="str-pad"><xsl:with-param name="string" select="$new-str"/><xsl:with-param name="str-length" select="10" /></xsl:call-template>
</xsl:template>
<xsl:template name="str-pad">
<xsl:param name="string" />
<xsl:param name="pad-char" select="'*'"/>
<xsl:param name="str-length" />
<xsl:value-of select="' '"/>
<xsl:choose>
<xsl:when test="string-length($string) = $str-length">
<xsl:value-of select="$string" />
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="str-pad">
<xsl:with-param name="string" select="concat($string,$pad-char)" />
<xsl:with-param name="pad-char" select="$pad-char" />
<xsl:with-param name="str-length" select="$str-length" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
输出:填充后= 1234567 ***
答案 2 :(得分:0)
<xsl:function name="functx:pad-string-to-length" as="xs:string"
xmlns:functx="http://www.functx.com">
<xsl:param name="stringToPad" as="xs:string?"/>
<xsl:param name="padChar" as="xs:string"/>
<xsl:param name="length" as="xs:integer"/>
<xsl:sequence select="
substring(
string-join (
($stringToPad, for $i in (1 to $length) return $padChar)
,'')
,1,$length)
"/>
</xsl:function>
例如: functx:pad-string-to-length('Ans','*',5) 输出:Ans **