使用ibex库时出现以下错误:
System.Xml.Xsl.XslTransformException:' format-date()'是一个未知的XSLT函数。
这是我的xslt:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!-- ... -->
<fo:block-container position="absolute" top="7*0.125in" left="0in" height="1*0.125in" line-height="0.125in" font-family="Courier" font-size="10pt">
<fo:block>Testof
<xsl:value-of select="format-date(//Testobject/Date, '[D01].[M01].[Y0001]')"/>
</fo:block>
</fo:block-container>
<!-- ... -->
</xsl:stylesheet>
为什么在使用ibex(版本4.8.8.6)转换为PDF时出现此错误的原因?
我必须使用这个XSLT文件。
答案 0 :(得分:2)
您正在尝试将XSLT 2.0与XSLT 1.0处理器一起使用(Microsoft的各种XSLT处理器仅支持XSLT 1.0)。要仅使用XSLT 2.0之类的功能format-date
,您需要使用像Saxon 9这样的XSLT 2.0处理器(在.NET version的https://sourceforge.net/projects/saxon/files/Saxon-HE/9.7/)或XmlPrime或AltovaXML({{ 3}}作为编辑或处理器https://www.altova.com/xmlspy.html)。 Saxon 9也是各种XML IDE的一部分,如https://www.altova.com/raptorxml.html,Stylus Studio或oXygen。
答案 1 :(得分:1)
Ibex的文档声明“XSLT转换的实际执行可以由Ibex完成,它使用.NET框架XSL转换对象[我将其解释为Microsoft XSLT处理器],或者在Ibex外部使用任何XSLT引擎。“
它还说“Ibex命令行程序将从(a)FO文件或(b)带有XSLT样式表的XML文件创建PDF文件。”
所以你需要:
使用XSLT 2.0处理器(如Saxon或XmlPrime)(从.NET程序或从命令行运行)运行XSLT转换。如果您使用命令行,那么对于Saxon,您可能是最好使用Java版本而不是.NET版本。
在步骤1中针对XSL-FO文件输出运行Ibex。