我有一个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
我的问题主要是关于是否可以在“格式编号”中使用“ 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>