XSL functx:pad-integer-to-length

时间:2015-06-23 14:49:46

标签: xml excel xslt

我对XSL很新 - 所以我想这是一个简单的问题......

我有一个XML文件,我想转换成Excel,一切正常,除了一件事: UserID可能包含前导零,并且在导入到Excel时会删除前导零 - 所以我想用前导零填充,直到我得到一个十位数的userID。 我发现函数pad-integer-to-length - 但似乎有更多的东西?

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
    <user>
    <xsl:for-each select="report/user">
    <xsl:sort select="substring(altID,8,4)"/>
        <patronline>
        <userID><xsl:value-of select="functx:pad-integer-to-length(userID, 10)"/></userID>
        <altID><xsl:value-of select="altID"/></altID>
        <sistafyra><xsl:value-of select="substring(altID,8,4)"/></sistafyra>
        <displayName><xsl:value-of select="name/displayName"/></displayName>
        <line><xsl:value-of select="address[@name='1']/entry[@name='Line']"/></line>
        <line1><xsl:value-of select="address[@name='1']/entry[@name='Line1']"/></line1>
        <line2><xsl:value-of select="address[@name='1']/entry[@name='Line2']"/></line2>
        <postalcode><xsl:value-of select="address[@name='1']/entry[@name='Postal code']"/></postalcode>
        <line3><xsl:value-of select="address[@name='1']/entry[@name='Line3']"/></line3>
        <email><xsl:value-of select="address[@name='1']/entry[@name='Email']"/></email>
        <note><xsl:value-of select="extendedInfo/entry[@name='Note']"/></note>
        <comment><xsl:value-of select="extendedInfo/entry[@name='comment']"/></comment>
    </patronline>
    </xsl:for-each>
    </user>
</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

我认为您正在讨论可以从http://www.xsltfunctions.com/xsl/download.html下载的库中的函数。因此,您需要下载http://www.xsltfunctions.com/xsl/functx-1.0-nodoc-2007-01.xsl并使用<xsl:import href="library.xsl"/>。但请注意,只有像Saxon 9或XmlPrime这样的XSLT 2.0处理器支持这样的库,因为只有XSLT 2.0或更高版本支持xsl:function

如果您使用的是XSLT 1.0处理器,则需要使用基于模板的解决方案或探索它是否支持EXSLT中定义的功能。

另一方面,我想知道做format-number(userID, '0000000000')是否足够。