Announcement

Collapse
No announcement yet.

Code identifizieren

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

  • Code identifizieren

    Hallo was macht die folgende Zeile? Ist das noch xslt 1.0?

    <xsl:value-of select="res:str('idResIdInfo')"/>

    Paul

  • #2
    xsl:value-of erzeugt einen Textknoten, in diesem Fall mit dem Resultat des Funktionsaufrufes res: str('idResIdInfo'), also wird die Funktion mit dem Namen res: str mit dem Argument 'idResIdInfo' aufgerufen. Die Funktion ist vermutlich eine Erweiterungsfunktion, wie diese genau definiert ist, lässt sich anhand des Schnipsels nicht sagen. Oder es ist XSLT 2.0 und die Funktion ist mittels xsl: function definiert, aber auch das lässt sich anhand des Auszuges, den du gepostet hast, nicht sagen.

    Comment


    • #3
      Vielen Dank erstmal.

      Also ist mit dem Funktionsaufruf allein noch nicht gesagt, dass es sich um xslt2.0 handelt? Ich dachte nur xslt 2.0 hätte die Möglichkeit eigene Funktionen (hier str()) zu definieren.

      Was ist eine Erweiterungsfunktion?

      Vielen Dank für Deine Geduld :-)

      Comment


      • #4
        Man kann nicht mit XSLT 1.0 Sprachelementen weitere Funktionen definieren, aber je nach Prozessor, den man benutzt, ist das mit Elementen wie z.B. msxsl: script (http://msdn.microsoft.com/en-us/library/ms256042.aspx) oder func: function (http://www.exslt.org/func/elements/function/index.html) möglich. Oder der Prozessor, den man benutzt, bietet selbst Funktionen zusätzlich an. Wie gesagt, allein mit dem Schnipsel lässt sich das nicht entscheiden, prüfe den Namensraum, der an den Präfix "res" in dem Stylesheet gebunden ist.

        Comment


        • #5
          Mein Prozessor sind "alle" Internetbrowser.

          Hab mal verucht eine Erweiterungsfunktion (dein 2. Link) nachzubauen.
          Hier die Fehlermeldung des Opera:
          This document had an invalid XSLT stylesheet. Error message from the XSLT engine:
          Error: XPath expression compilation failed: my:func()
          Details: compilation error (characters 1-9, "my:func()"): unknown function called: '{ my://own.uri, func }'
          Muss mich wohl noch ein wenig mit dem Problem beschäftigen.
          Schönes Wochenende,
          Paul

          Comment


          • #6
            IE benutzt MSXML als XSLT-Prozessor, da sollte msxsl: script mit Sprachen wie JScript oder VBScript funktionieren.
            Bei den anderen bekannten Browsern ist mir keine Unterstützung von ähnlichem bekannt, am ehesten besteht bei den Webkit-Browsern wie Safari oder Google Chrome die Möglichkeit, dass http://www.exslt.org/func/elements/function/index.html unterstützt wird, denn diese Browser benutzen meines Wissens libxml/xslt und dieser Prozessor ist unter der EXSLT-Dokumentation aufgeführt. Aber wenn ich das Stylesheet
            Code:
            <xsl:stylesheet
              xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:func="http://exslt.org/functions"
              xmlns:mf="http://example.com/mf"
              extension-element-prefixes="func"
              exclude-result-prefixes="func mf"
              version="1.0">
              
              <xsl:output method="html" indent="yes"/>
              
              <func:function name="mf:f1">
                <xsl:param name="p1"/>
                <xsl:choose>
                  <xsl:when test="string($p1) = 'yes'">
                    <func:result select="true()"/>
                  </xsl:when>
                  <xsl:otherwise>
                    <func:result select="false()"/>
                  </xsl:otherwise>
                </xsl:choose>
              </func:function>
              
              <xsl:template match="/">
                <html>
                  <head>
                    <title>Test</title>
                  </head>
                  <body>
                    <h1>Test</h1>
                    <xsl:apply-templates/>
                  </body>
                </html>
              </xsl:template>
              
              <xsl:template match="test">
                <p>
                  <xsl:choose>
                    <xsl:when test="function-available('mf:f1')">
                      <xsl:text>Test passed. Function call result: </xsl:text>
                      <xsl:value-of select="mf:f1(.)"/>
                      <xsl:text>.</xsl:text>
                    </xsl:when>
                    <xsl:otherwise>Test failed.</xsl:otherwise>
                  </xsl:choose>
                </p>
              </xsl:template>
              
            </xsl:stylesheet>
            gegen das XML-Dokument
            Code:
            <?xml version="1.0" encoding="UTF-8"?>
            <?xml-stylesheet type="text/xsl" href="test2011022501Xsl.xml"?>
            <root>
            <test>yes</test>
            <test>no</test>
            </root>
            mit xsltproc/libxslt von der Kommandozeile ausführe, dann wird folgendes ausgegeben:
            Code:
            <html>
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Test</title>
            </head>
            <body>
            <h1>Test</h1>
            <p>Test passed. Function call result: true.</p>
            <p>Test passed. Function call result: false.</p>
            </body>
            </html>
            Wenn ich das XML-Dokument mit Browsern wie Opera (11) oder Firefox (3.6) lade, dann wird, wie erwartet, da EXSLT func: function nicht unterstützt wird,
            Code:
            Test
            
            Test failed.
            
            Test failed.
            ausgegeben.
            Mit Safari (5.0.3) wird gar nichts angezeigt, auch die Fehlerkonsole ist leer, keine Ahnung, woran das liegt. Falls du Chrome hast, kannst du ja mal damit testen, ob zumindest eine Ausgabe kommt. Oder eventuell liest hier sonst noch jemand, der testen und berichten kann.

            Comment


            • #7
              Chrome zeigt auch nix an...


              In "Liquid XML" wird folgendes ausgegeben:
              Code:
              <html>
                <head>
                  <META http-equiv="Content-Type" content="text/html; charset=utf-8">
                  <title>Test</title>
                </head>
                <body>
                  <h1>Test</h1>
              <p>Test failed.</p>
              <p>Test failed.</p>
              </body>
              </html>


              Also sind die Browser und selbst Liquid nicht in der Lage Erweiterungsfunktionen zu bearbeiten?

              Paul

              Comment


              • #8
                "Die Browser"? Der Link http://msdn.microsoft.com/en-us/library/ms256042.aspx zeigt, wie man Erweiterungsfunktionen in JScript oder VBScript mittels msxsl: script in Stylesheets implementieren kann, die mit MSXML ausgeführt werden. MSXML wird u.a. in IE als XSLT-Prozessor benutzt. Von dort kopiertes Beispiel:
                Code:
                <xsl:stylesheet version="1.0"
                      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                      xmlns:user="http://mycompany.com/mynamespace">
                
                <msxsl:script language="JScript" implements-prefix="user">
                   function xml(nodelist) {
                      return nodelist.nextNode().xml;
                   }
                </msxsl:script>
                
                <xsl:template match="/">
                   <xsl:value-of select="user:xml(.)"/>
                </xsl:template>
                
                </xsl:stylesheet>
                Der EXSLT-Mechanismus hingegen wird mit MSXML nicht unterstützt, und unseren Tests nach auch nicht mit Opera oder oder Safari oder Mozilla. Mozilla unterstützt allerdings einige EXSLT-Funktionen, siehe https://developer.mozilla.org/en/EXSLT, so dass man durchaus in Stylesheets, die mit Mozilla ausgeführt werden können, die Syntax prefix: funktionsName() vorkommen kann, allerdings nur für die ausgewählten Funktionen, die dokumentiert sind.

                Comment


                • #9
                  Das hat mir sehr weitergeholfen!

                  Danke!

                  Comment

                  Working...
                  X