2017-03-04 1 views
1

Je suis en cours d'exécution du plug-in XML Maven avec ce fragment POM:ne pouvez pas utiliser <xsl: évaluer> à Saxon 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> 

La feuille de style contient une fonction, <xsl:evaluate>, qui fait partie de XSLT 3.0, ce que je comprends est pris en charge dans Saxon-HE 9.7.0. La feuille de style déclare correctement la version 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"> 

Mais le traitement de ce fragment:

 <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> 

Je reçois

[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 

Qu'est-ce que je manque? Merci.

Répondre

2

Saxon 9.7 HE ne prend en charge aucune fonctionnalité de langage XSLT 3.0, vous avez besoin de PE ou EE pour cela (http://saxonica.com/html/documentation/xsl-elements/evaluate.html). La seule amélioration que vous obtenez dans 9,7 HE avec les feuilles de style version="3.0" est l'accès aux expressions XPath 3.0 (comme let) et les fonctions (comme serialize ou parse-xml).

En ce qui concerne votre code, êtes-vous sûr d'avoir besoin de xsl:evaluate? Il semble

  <xsl:attribute name="column-width" select="@width"/> 

pourrait suffire, à moins que votre width attribut contient une expression XPath vous devez évaluer.

Je dirais même remplacer

<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> 

avec

<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

Merci, je me suis perdu dans les différentes éditions. Oui, j'ai besoin d'une évaluation, parce que je pourrais passer une expression en utilisant certaines variables impliquant des mesures de page (le truc est lié à FOP pour la composition des livres). J'ai aussi besoin de beaucoup de refactorings pour mon code XSLT, mais pour le moment je suis coincé avec le besoin d'évaluer, et je dois travailler dessus avant d'améliorer le reste du code. –

1

Martin Honnen déjà obligeamment souligné (+1) que Saxon 9.7 Il ne prend pas en charge XSLT 3.0, mais je voulais ajouter une autre possibilité pour les futurs lecteurs qui peuvent avoir des problèmes dans ce domaine: Si Saxon 9.7 EE ou PE ne parvient pas à trouver une clé de licence correcte , il semble continuer à travailler avec des fonctionnalités réduites, peut-être comme il le ferait sous HE. D'une part, ce type de dégradation progressive peut être utile, mais d'autre part, il peut également être source de confusion pour les utilisateurs EE ou PE sous licence qui n'attendent pas ce comportement lorsqu'ils ne placent pas correctement une clé de licence. fichier sur une nouvelle configuration de la machine.