Announcement

Collapse
No announcement yet.

In XSLT einen XPath-Ausdruck dynamisch bauen

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

  • In XSLT einen XPath-Ausdruck dynamisch bauen

    Hallo Zusammen,

    ich habe folgendes Problem.
    Ich möchte einen XPath-Audruck innerhalb eines XSLT-Stylsheets dynamisch über Parameter setzen.
    Das würde dann so aussehen:
    Code:
    <xsl:param name="seitentyp"/>
    <xslout:param name="test" select="if/$seitentyp/link"/>
    Wobei der Paramter "seitentyp" aus PHP übergeben wird.
    So einfach wie oben gezeigt geht es leider nicht.

    Weiß jemand ob das überhaupt möglich ist bzw. wie man es dann richtig macht?!

    Vielen Dank schon mal für die Hilfe!

  • #2
    Hallo,

    ich hab nun folgenden Weg gefunden den Parameter zu integrieren:
    Code:
    <xslout:param name="pfad" select="concat('if/',$seitentyp,'/include/link')"/>
    Allerdings wird mit concat() der Wert in einen String gewandelt und lässt sich als XPath-Ausdruck innerhalb eines foreach-Selects nicht mehr einsetzen:
    Code:
    <xslout:for-each select="$pfad">...
    Nun habe ich noch eine andere Möglichkeit gefunden:
    Code:
    <xslout:for-each select="/if/*[name()=$seitentyp]/include/link">
    <xslout:variable name="node" select="."/>
    <xsl:include href="{$node}"/>
    </xslout:for-each>
    Ich weiß aber nicht ob das die beste Lösung ist mit [name()=Parameter] zu arbeiten?
    Hat keiner eine Idee?

    Ich arbeite übrigens noch mit XSLT 1.0!
    Zuletzt editiert von AleSan; 11.02.2011, 12:51.

    Comment


    • #3
      *[name() = $var] oder eventuell (falls Namensräume verwendet werden) *[local-name() = $var] ist die einzige Möglichkeit, so der XSLT-Prozessor nicht http://www.exslt.org/dyn/functions/evaluate/index.html oder ähnliches unterstützt.

      Comment


      • #4
        Danke für die Info...dann werd ich es dabei belassen, da ja das Element function in der XSLT Version 1.0 leider nicht zur Verfügung steht.

        Ich hab noch mal kurz eine andere Frage...wenn ich einen Parameter oder eine Variable innerhalb eines choose-when-otherwise deklariere...kann ich sie dann auch ausserhalb dieser Anweisung aufrufen?

        Comment


        • #5
          Du kannst innerhalb eines xsl: variable oder xsl: param ein xsl: choose/when/otherwise verwenden. Aber eine Variable ist immer nur innerhalb ihres Elternelement für alle nachfolgenden Geschwisterelemente und deren Kinder und Nachfahren sichtbar (solange dort nicht eine weitere Variable dieses Namens definiert wird).

          Comment


          • #6
            Originally posted by AleSan View Post
            Danke für die Info...dann werd ich es dabei belassen, da ja das Element function in der XSLT Version 1.0 leider nicht zur Verfügung steht.
            dyn: evaluate ist eine Erweiterungsfunktion, die ein XSLT Prozessor zur Verfügung stellen kann. Mit "xsl: function" und XSLT 2.0 hat das nichts zu tun. Eine derartige Funktionalität lässt sich auch in XSLT 2.0 nicht mit xsl: function erreichen, auch in XSLT 2.0 ist man auf eine Erweiterungsfunktion angewiesen (wobei sowohl Saxon http://www.saxonica.com/documentatio.../evaluate.html also auch Altova http://manual.altova.com/AltovaXML/a...va_general.htm eine anbieten).

            Comment


            • #7
              Hab gerade gesehen das PHP 5 evaluate() unterstützt, also würde ich es dann so schreiben:
              Code:
              <xslout:param name="pfad" select="dyn:evaluate(concat('if/',$seitentyp,'/include/link'))"/>
              Wäre das die bessere Lösung, anstatt *[name() = $var]?

              Comment


              • #8
                dyn: evaluate ist mächtiger als *[name() = $var], denn evaluate kann ja beliebige Ausdrücke verarbeiten. Aber für "besser" halte ich es nicht, so *[name() = $var] ausreicht, da letzteres mit jedem XSLT-Prozessor funktioniert, während die Erweiterungsfunktion wenig portabel ist.

                Comment


                • #9
                  ok, dankeschön

                  Ich hätte noch eine Frage... Ich möchte gerne aus einer XML-Datei und mehreren XSLT-Stylesheets ein weiteres XSLT-Stylesheet erstellen. Auf die Daten der XML-Datei greife ich ja über den XSLT-Prozessor mit XPATH-Ausdrücken zu. Auf weitere Stylesheets bzw. Templates kann ich mit call-template oder apply-template zugreifen. Aber was ich möchte ist ein Teil des Textes und XSLT-Anweisungen eines XSLT-Templates in ein anderes richtig einfügen.

                  Wie könnte ich das machen? Mit document() vielleicht? Aber ich weiß nicht wie ich auf die XSLT-Anweisungen dann zugreife.

                  Ich hoffe ich hab mich jetzt richtig ausgedrückt und man versteht was ich machen möchte

                  Comment


                  • #10
                    Starte für die neueste Frage bitte einen neuen Thread und poste mal Beispiele von XML und XSLT-Eingabe und der gewünschten XSLT-Ausgabe, dann wird es vielleicht klarer.

                    Comment


                    • #11
                      mach ich danke!

                      Comment

                      Working...
                      X