ibex - System.Xml.Xsl.XslTransformException:' format-date()'是一个未知的XSLT函数

时间:2017-04-24 10:03:30

标签: c# xslt

使用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文件。

2 个答案:

答案 0 :(得分:2)

您正在尝试将XSLT 2.0与XSLT 1.0处理器一起使用(Microsoft的各种XSLT处理器仅支持XSLT 1.0)。要仅使用XSLT 2.0之类的功能format-date,您需要使用像Saxon 9这样的XSLT 2.0处理器(在.NET versionhttps://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.htmlStylus StudiooXygen

答案 1 :(得分:1)

Ibex的文档声明“XSLT转换的实际执行可以由Ibex完成,它使用.NET框架XSL转换对象[我将其解释为Microsoft XSLT处理器],或者在Ibex外部使用任何XSLT引擎。“

它还说“Ibex命令行程序将从(a)FO文件或(b)带有XSLT样式表的XML文件创建PDF文件。”

所以你需要:

  1. 使用XSLT 2.0处理器(如Saxon或XmlPrime)(从.NET程序或从命令行运行)运行XSLT转换。如果您使用命令行,那么对于Saxon,您可能是最好使用Java版本而不是.NET版本。

  2. 在步骤1中针对XSL-FO文件输出运行Ibex。