2017-03-04 67 views
1

我運行XML Maven插件這個POM片段的 無法使用:在薩克森9.7

<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 

我缺少什麼?謝謝。

回答

2

Saxon 9.7 HE不支持任何XSLT 3.0語言功能,您需要PE或EE(http://saxonica.com/html/documentation/xsl-elements/evaluate.html)。在9.7 HE和version="3.0"樣式表中唯一的增強功能是訪問XPath 3.0表達式(如let)和函數(如serializeparse-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> 
+0

謝謝,我迷失在各種版本。是的,我確實需要評估,因爲我可能會使用一些涉及頁面測量的變量來傳遞表達式(這些內容與排版圖書的FOP相關)。我還需要對XSLT代碼進行大量的重構,但目前我仍然需要評估,在改進代碼的其餘部分之前,我必須先處理它。 –

1

馬丁Honnen已經有益指出的(+1),其撒克遜9.7他不支持XSLT 3.0,但我想添加其他未來讀者可能會遇到這方面的問題:如果Saxon 9.7 EE或PE無法找到合適的許可證密鑰,它似乎會繼續與減少的功能一起工作,可能會像在HE中一樣。

一方面,這種優雅的退化可能會有所幫助,但另一方面,當未能正確放置許可證密鑰時,不希望出現此行爲的許可EE或PE用戶也會感到困惑文件在新的機器設置上。