显而易见的答案——乘以 10 或与 a 连接'0'
已经提出。
这是一个更通用的解决方案:
此转换在末尾添加了必要零的确切数量,latitude
并且longitude
对于string-length()
小于 8 的任何值:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="
*[self::latitude or self::longitude
and
not(string-length() >= 8)
or
(starts-with(., '-') and not(string-length() >= 9))
]">
<xsl:copy>
<xsl:value-of select=
"concat(.,
substring('00000000',
1,
8 + starts-with(., '-') - string-length())
)
"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于此 XML 文档时:
<coordinates>
<latitude>3876570</latitude>
<longitude>-9013376</longitude>
</coordinates>
产生了想要的正确结果:
<coordinates>
<latitude>38765700</latitude>
<longitude>-90133760</longitude>
</coordinates>
应用于此 XML 文档时:
<coordinates>
<latitude>123</latitude>
<longitude>-99</longitude>
</coordinates>
再次产生所需的正确结果:
<coordinates>
<latitude>12300000</latitude>
<longitude>-99000000</longitude>
</coordinates>
请注意:
在表达式中:
substring('00000000',
1,
8 + starts-with(., '-') - string-length())
我们使用的事实是,只要布尔值是算术运算符的参数,它就会使用以下规则转换为数字:
number(true()) = 1
和
number(false()) = 0
因此,如果当前节点的值为负数,则上面的表达式再提取一个零 - 以考虑减号并获得我们必须附加到数字的确切数量的零。