2011-01-04 3 views

Antwort

0

Dies ist nicht reproduzierbar

Dieses Sheet:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:local="http://localhost/"> 
    <xsl:import href="lib.xsl"/> 
    <xsl:template match="/"> 
     <xsl:value-of select="local:function()"/> 
    </xsl:template> 
</xsl:stylesheet> 

Mit diesem Modul importiert:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:local="http://localhost/" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xsl:function name="local:function" as="xs:boolean"> 
     <xsl:sequence select="true()"/> 
    </xsl:function> 
</xsl:stylesheet> 

Ausgang *:

true 

* Getestet auf Saxon und Altova. (My XQSharp ist abgelaufen ...)

+1

@Alejandro: XQSharp haben eine neue Beta. Ich habe es vor ein paar Tagen heruntergeladen. –

+0

@Alejandro: Wie haben Sie die Fußnote produziert? –

+0

@Dimitre: Es sieht so aus, als hätte er '...' verwendet, um eine falsche Fußnotenschrift zu erstellen. –

0

Ich habe gerade festgestellt, dass, wenn main.xsl xsl: Importe lib.xsl die einige XSLT2 Funktionen definiert, können diese Funktionen nicht in Haupt verwendet werden .xsl

Das stimmt natürlich nicht.

Werfen Sie einen Blick auf die FXSL Bibliothek, deren Vorlagen Funktionen enthalten, die mit dem XSLT-Code importiert werden müssen. Die Stylesheet-Module von FXSL importieren tatsächlich andere Stylesheet-Module und verwenden deren Funktionen.

Hier ist ein einfaches Beispiel:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:f="http://fxsl.sf.net/" 
exclude-result-prefixes="f" 
> 

    <xsl:import href="../f/func-foldl.xsl"/> 
    <xsl:import href="../f/func-Operators.xsl"/> 

<!-- 
    This transformation calculates 10! 

     Expected result: 3628800 or 3.6288E6 
--> 
    <xsl:output encoding="UTF-8" omit-xml-declaration="yes"/> 

    <xsl:template match="/"> 
     <xsl:value-of select="f:foldl(f:mult(), 1, 1 to 10)"/> 
    </xsl:template> 
</xsl:stylesheet> 

Wenn diese Transformation auf jedem XML-Dokument (nicht benutzt) angewandt wird, berechnet sie die 10! (10 faktorielle) Wert:

3628800 

Alle drei XSLT 2.0-Prozessoren mit denen ich arbeite: Saxon 9, AltovaXML und XQSharp das gleiche Ergebnis. Hier

ist eine Teilansicht in der Import Hierarchie der obigen Transformation:

alt text

Wie wir sehen können, nur weniger als die Hälfte aller Importe gezeigt werden ... :)

Natürlich sehen wir hier nur die importierten Vorlagen, aber in jedem importierten Stylesheet-Modul gibt es für jede Vorlage mindestens zwei <xsl:function> s.

+0

Dimitre, ich bin gespannt, zu welchem ​​Werkzeug gehört der "Template Navigator"? –

+0

@ Martin-Honnen: Der XSelerator natürlich. Meine Hauptwaffe :) –