如何使用xsl填充char

时间:2015-07-08 10:05:40

标签: xslt-1.0

我想使用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. 

3 个答案:

答案 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 **