我正在使用此POM片段运行XML Maven插件:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<goals>
<goal>transform</goal>
</goals>
</execution>
</executions>
<configuration>
<transformationSets>
<transformationSet>
<dir>${basedir}/target/xml</dir>
<stylesheet>${basedir}/target/typesetting/fop/xslt/PhotoBook-fo.xslt</stylesheet>
</transformationSet>
</transformationSets>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.7.0-15</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
样式表包含一个功能<xsl:evaluate>
,它是XSLT 3.0的一部分,据我所知,它在Saxon-HE 9.7.0中得到支持。样式表正确声明了XSLT版本:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
但处理这个片段:
<xsl:for-each select="xhtml:tr[1]/xhtml:td">
<xsl:element name="table-column" namespace="http://www.w3.org/1999/XSL/Format">
<xsl:attribute name="column-width">
<xsl:evaluate select="@width"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
我得到了
[INFO] --- xml-maven-plugin:1.0.1:transform (default) @ birds-portfolio-1 ---
Static error at xsl:evaluate on line 132 column 56 of xhtml5-fo.xslt:
XTSE0010: Unknown XSLT element: evaluate
我错过了什么?感谢。
答案 0 :(得分:2)
Saxon 9.7 HE不支持任何XSLT 3.0语言功能,您需要PE或EE(http://saxonica.com/html/documentation/xsl-elements/evaluate.html)。您使用version="3.0"
样式表在9.7 HE中获得的唯一增强功能是访问XPath 3.0表达式(如let
)和函数(如serialize
或parse-xml
)。
至于您的代码,您确定需要xsl:evaluate
吗?似乎
<xsl:attribute name="column-width" select="@width"/>
可能就足够了,除非您的width
属性包含您需要评估的XPath表达式。
我甚至会替换
<xsl:for-each select="xhtml:tr[1]/xhtml:td">
<xsl:element name="table-column" namespace="http://www.w3.org/1999/XSL/Format">
<xsl:attribute name="column-width">
<xsl:evaluate select="@width"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
与
<xsl:for-each select="xhtml:tr[1]/xhtml:td">
<table-column xmlns="http://www.w3.org/1999/XSL/Format" column-width="{@width}"/>
</xsl:for-each>
答案 1 :(得分:1)
Martin Honnen已经有用地指出(+1)Saxon 9.7 HE不支持XSLT 3.0,但我想为未来可能在这方面遇到问题的读者增加另一种可能性:如果Saxon 9.7 EE或PE未能找到一个合适的许可证密钥,它似乎继续使用减少的功能,可能与HE一样。
一方面,这种优雅的降级可能会有所帮助,但另一方面,对于未能正确放置许可证密钥文件时不期望此行为的许可EE或PE用户也会造成混淆在新的机器设置上。