Announcement

Collapse
No announcement yet.

funktionen in XSLT 2.0

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • funktionen in XSLT 2.0

    hallo zusammen,

    ich habe ein XML Dokument und ein XSLT Stylesheet erstellt.
    Nun wollte ich selbstdefinierte Funktionen einbauen und habe daher
    mein XSLT Dokument auf die Version 2.0 umgestellt (nach einer Anleitung die ich hier im Forum gefuinden habe)

    ja und wenn ich selbstdefinierte Funktionen einbaue funktiniert das nicht und ich bekomme eine fehlermeldung.

    IE sagt: Ein Verweis auf Variable oder Parameter 'seq' kann nicht gelöst werden. Die Variable bzw. der Parameter ist möglicherweise ... (hier hört die Meldung dummerweise auf )

    Firefox sagt: Fehler während der XSLT-Transformation: (null)

    Hier mal mein Code

    XSL-Datei - Umstellung auf Version 2.0
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="fn xs">
      
    <xsl:template match="/">
    <html>
    <head>
    ...
    ...
    Einbettung der eigenen Funktion
    Code:
    <xsl:function name="gibaus" as="xs:decimal">
    <xsl:variable name="seq" select="(15345353455453535)"/>
    <xsl:sequence select="$seq"/>
    
    </xsl:function>
    
    <xsl:template match="nvidia">
    <p style="border: 3px solid #0066ee; font-size: 18px; font-family: Helvetica; color: #000000; padding:10px; background-color:silver;"><i>Nvidia Grafikkarten</i></p>
    
    <xsl:value-of select="$seq"/>
    <xsl:apply-templates/>
    
    </xsl:template>
    Wo liegt mein Fehler? Kann mir da bitte jmd. weiterhelfen?

    Gruß Chris

  • #2
    Die gängigen Browser unterstützen nur XSLT/XPath 1.0.

    Comment


    • #3
      wie kann ich dann kontrollieren ob mein Code funktioniert? Welchen Broweser muss ich benutzen? Andere Leute die mit XSLT 2.0 arbeiten müssen ihre ergebnisse ja auch kontrollieren.

      Comment


      • #4
        Für XSLT/XPath 2.0 kann Saxon oder AltovaXML in den aktuellen Versionen verwendet werden. Etwas exotischer ist Gestalt, wobei dieser Prozessor noch nicht den kompletten Funktionsumfang unterstützt. Alle diese Tools lassen sich an der Konsole aufrufen.

        Comment


        • #5
          Da ich den XML Spy benutze und somit schon einen XSLT 2.0 Prozessor habe, bräuchte ich AltovaXML 2008 im Prinzip nicht aber ich habe es trotzdem nochmal insalliert. aber was nun? Wenn ich in die Browser-Ansicht von XMLSpy wechsele zeigt er mir immer noch denselben Fehler an. Jetzt weiß ich nicht wie ich weiter machen kann. Ich mein es kann doch nicht so schwer sein XSLT 2.0 zu benutzen.

          Comment


          • #6
            Ist in den XSL-Einstellungen der XSLT 2.0-Prozessor aktiviert?

            Wenn die Transformation mittels <?xml-stylesheet ... ?>-PI über das XML-Dokument ausgeführt wird (Browser-Vorschau), dann kommt dennoch nur der interne MSXML-Prozessor des IE zum Einsatz.

            Ansonsten lässt es sich leicht testen, z. B. so: <xsl:value-of select="element-available('xsl:function')"/>
            mit dem Ergebnis: true für >= 2.0 und false für 1.0

            BTW zur eigentlichen Funktion:
            - deklariere einen eigenen Namensraum, etwa xy
            - schreibe den Funktionsnamen als xy:funktionsname und lege den Rückgabetyp fest
            - definiere das/die zu übergebenden Argument(e) über xslaram sowie den jeweiligen Datentyp über dessen as-Attribut
            - übergib der Funktion im XSLT-Code den/die Parameter, z. B. als <xsl:value-of select="xy:funktionsname(123)"/>

            Konkretes Beispiel:
            Code:
            <?xml version="1.0" encoding="ISO-8859-1"?>
            <xsl:stylesheet version="2.0"
              xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:fn="http://www.w3.org/2005/xpath-functions"
              xmlns:xy="http://example.net/xy"
              exclude-result-prefixes="fn xs xy">
            
              <xsl:output method="text"/>
            
              <xsl:function name="xy:multi" as="xs:decimal">
                <xsl:param name="a" as="xs:decimal"/>
                <xsl:param name="b" as="xs:decimal"/>
                <xsl:value-of select="$a * $b"/>
              </xsl:function>
            
              <xsl:template match="/">
                <xsl:value-of select="xy:multi(2,3)"/><!-- Ergebnis: 6 -->
              </xsl:template> 
              
            </xsl:stylesheet>
            Zuletzt editiert von Thomas Meinike; 05.06.2008, 20:13.

            Comment


            • #7
              Vielen Dank, das hat mir schon sehr weitergeholfen. Habe festgestellt dass der interne XSLT Prozessor vom IE und FireFox die Version 1.0 besitzt. Gibts es eine Möglichkeit diesen XSLT Prozessor auf die Version 2.0 zu aktualisieren? Wäre sehr nett wenn sie mir das kurz erläutern würden.

              Comment


              • #8
                Es gibt nur die genannten Tools, Browser sind nach wie vor auf 1.0-Niveau und haben ja ihre eigenen Engines. Man kann jedoch serverseitig auf Tools wie Saxon zugreifen.

                Comment

                Working...
                X