如何在xslt中的数据之间应用空间

时间:2011-05-25 11:01:02

标签: xslt xslt-1.0

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,但是我遇到了用空格替换剩余长度的问题 您可以在中间线普拉文看到的上述值是让我们假设这个xml消息 praveen 我们收到了另一条消息,我们可能会收到消息 Tom 但是最大长度为< strong> 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,'&#13;'),6), ',',substring-after(value,'&#13;'))" />
  </xsl:for-each>
    </xsl:template>
  </xsl:stylesheet>

预期的OUPUT lIKE:

0501 /,045788775099,praveen ............................ MENENDEZ Y PELAYOA CORUNA SPA < / p>

其中点代表空间不假设点

我需要那里的空间假设认为praveen是7个字符,剩下的28个字符应该在xslt中创建空间

4 个答案:

答案 0 :(得分:13)

尝试使用

<xsl:text>        </xsl:text>

空格位于这些标签之间。

了解更多信息:XSLT Controlling Whitespace

答案 1 :(得分:4)

  

让我们假设这个xml消息   praveen我们收到了另一个   消息,我们凸轮可能会收到汤姆但是   最大长度是35所以我们需要   caluclate字符串名称值   我们应该替换剩余的长度   与SPACE所以我不知道怎么更换一个   那边的空间...

使用

substring(concat($vstr, $vBlanks35), 1, 35)

这将评估$vstr('Praveen')与$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                            "

答案 2 :(得分:3)

在xml中添加空格的一种(通用)方法是使用保留空格的特殊xml属性:

<value xml:space="preserve"> 
        your 
        values 
        here ... 
</value>

另一种方法是使用XSL's preserve/strip space ...

答案 3 :(得分:1)

您应该使用SQL函数RPAD的XSLT版本:

<xsl:template name="rpad">
  <xsl:param name="text" />
  <xsl:param name="length" />
  <xsl:param name="char" select="' '" />
  <xsl:if test="$length &gt; 0 and string-length($text) &gt; 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>

Optionnally你可以指定一个char参数,用于填充字符以外的字符。