我对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>
答案 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')
是否足够。