xslt中“ format-number()”内部使用“ current()”的左填充

问题描述 投票:0回答:1

我有一个xml元素<RandomNumber>,其字符串大小始终为8或9位数字。如果该元素的字符串长度大于1,则我希望在其大小为8而不是9位的情况下用零填充。所以我写了下面的代码:

<?xml version = '1.0' encoding = 'UTF-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:variable name="STRING_LENGTH">
      <xsl:text>1</xsl:text>
</xsl:variable>
<xsl:for-each select="current()[string-length(RandomNumber) >= $STRING_LENGTH]/RandomNumber">
    <xsl:element name="leftPNumber">
        <xsl:value-of select="format-number(current(), '000000000')"/>
    </xsl:element>
</xsl:for-each>
</xsl:stylesheet>

对于输入:

<RandomNumbers>
    <RandomNumber>11223366</RandomNumber>
</RandomNumbers>

预期的输出应该是:

<leftPNumber>011223366</leftPNumber>

出于某种原因,它无法按预期工作,但也没有错。它只是创建带有原始编号的新元素,而无需添加额外的“ 0”。这是因为我在“格式编号”中使用current()吗?如果是这样,我可以使用什么替代方法?

干杯,

Jesper

xml xslt transformation
1个回答
0
投票

我的问题主要是关于是否可以在“格式编号”中使用“ current()”

是的,您可以-只要上下文节点是保存您要格式化的值的节点。

例如,给定:

XML

<RandomNumbers>
    <RandomNumber>5</RandomNumber>
    <RandomNumber>56</RandomNumber>
    <RandomNumber>567</RandomNumber>
</RandomNumbers>

以下样式表:

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:template match="/RandomNumbers">
    <xsl:copy>
        <xsl:for-each select="RandomNumber">
            <leftPNumber>
                <xsl:value-of select="format-number(current(), '000000000')"/>
            </leftPNumber>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet> 

将返回:

结果

<?xml version="1.0" encoding="UTF-8"?>
<RandomNumbers>
  <leftPNumber>000000005</leftPNumber>
  <leftPNumber>000000056</leftPNumber>
  <leftPNumber>000000567</leftPNumber>
</RandomNumbers>
© www.soinside.com 2019 - 2024. All rights reserved.