2017-03-04 2 views
1

ich die XML-Maven Plugin mit diesem POM Fragmente ausgeführt wird:Kann nicht verwenden <xsl: Evaluieren> in 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> 

Das Stylesheet eine Funktion enthält, <xsl:evaluate>, dass ein Teil von XSLT 3.0 ist, was ich verstehe, wird in Saxon-HE 9.7.0 unterstützt. Das Stylesheet erklärt korrekt die XSLT-Version:

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

Aber Verarbeitung dieses 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> 

I

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

Was bin ich? Vielen Dank.

Antwort

2

Saxon 9.7 HE unterstützt keine XSLT 3.0-Sprachfunktion, dafür benötigen Sie PE oder EE (http://saxonica.com/html/documentation/xsl-elements/evaluate.html). Die einzige Verbesserung, die Sie in 9.7 HE mit version="3.0" Stylesheets erhalten, ist der Zugriff auf XPath 3.0-Ausdrücke (wie let) und Funktionen (wie serialize oder parse-xml).

Wie für Ihren Code, sind Sie sicher, dass Sie benötigen ? Es scheint

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

könnte ausreichen, es sei denn, Ihr width Attribut enthält einen XPath-Ausdruck Sie auswerten müssen.

würde ich sogar

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

mit

<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

Danke, ich habe mich in den verschiedenen Editionen verlaufen. Ja, ich brauche eine Bewertung, weil ich vielleicht einen Ausdruck mit einigen Variablen übergeben kann, die Seitenmessungen beinhalten (das Zeug steht mit FOP für das Setzen von Büchern in Verbindung). Ich muss auch viele Änderungen an meinem XSLT-Code vornehmen, aber im Moment bin ich mit der Notwendigkeit des Evaluierens fest und ich muss daran arbeiten, bevor ich den Rest des Codes verbessere. –

1

Martin Honnen ersetzen bereits darauf hingewiesen, helfend (+1), dass Saxon 9.7 HE bietet keine Unterstützung für XSLT 3.0, aber ich wollte eine neue hinzufügen Möglichkeit für zukünftige Leser, die möglicherweise Probleme in diesem Bereich haben: Wenn Saxon 9.7 EE oder PE einen ordnungsgemäßen Lizenzschlüssel nicht findet, scheint es weiterhin mit eingeschränkter Funktionalität zu arbeiten, vielleicht wie unter HE.

Auf der einen Seite kann diese Art der graziösen Degradierung hilfreich sein, auf der anderen Seite kann es auch für lizenzierte EE- oder PE-Benutzer verwirrend sein, die dieses Verhalten nicht erwarten, wenn sie einen Lizenzschlüssel nicht richtig platzieren Datei auf einem neuen Computer Setup.

Verwandte Themen