Announcement

Collapse
No announcement yet.

ends-with( ) + xsl 1.0

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

  • ends-with( ) + xsl 1.0

    Hallo,

    bräuchte mal wieder nen schubser in die richtige Richtung:
    allen Anschein nach wird die Funktion ends-with( ) in xsl 1.0 nicht unterstützt (wenn falsch, dann schreien! )
    Zumindest kriege ich immer eine Fehlermeldung und nach ausgiebiger Recherche im Internet konnte ich immer nur die Funktion starts-with() finden, aber eben nicht ends-with().

    Welche Möglichkeiten habe ich denn sonst mit XSL 1.0 das letzte Zeichen eines Strings abzufragen ? Sprich: datei.doc -> 'c'

    gruß

  • #2
    ends-with() steht erst mit XPath 2.0 zur Verfügung.

    Alternative:
    Code:
    <xsl:variable name="t" select="'abcdefg'"/>
    <xsl:value-of select="substring($t,string-length($t),1)"/><!-- Ergebnis: g -->
    Auf den letzten Parameter für die Anzahl der Zeichen (hier 1) kann man auch verzichten, dann wird von der Startposition (hier string-length()) bis zum String-Ende gelesen (das wäre hier ebenfalls ein Zeichen).

    Comment


    • #3
      Ach ja klar, Substring geht ja bis zum Ende. Super, Dankeschön.

      Eine Frage hätte ich noch:
      was muss denn beachten wenn man ein Stylesheet auf 2.0 "upgraden" will ? geht das so einfach oder gehört da ein mehr zu?
      Mein Header sieht im Moment so aus:
      <xsl:stylesheet
      version="1.0"
      exclude-result-prefixes="x d xsl msxsl cmswrt"
      xmlns:x="http://www.w3.org/2001/XMLSchema"
      xmlns:d="http://schemas.microsoft.com/sharepoint/dsp"
      xmlns:cmswrt="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime"
      xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">


      gruß

      Comment


      • #4
        Am einfachsten ist die Verwendung von version="2.0" statt version="1.0" beim xsl:stylesheet-Element. Dann mal die Transformationen mit konformen XSLT/XPath 2.0-Prozessoren laufen lassen (Saxon 8.9 bzw. AltovaXML 2007). Wenn alles wie gewünscht auch unter 2.0 läuft, kann man die neuen Techniken angehen.

        Falls Schema-Konstruktoren wie xs:date('2007-08-24') bzw. -Datentypen (xs:double, xs:integer, xs:string usw.) Verwendung finden, wird noch der xs-Namensraum benötigt und für die neuen XPath-Funktionen der fn-Namensraum, wobei sich die XPath-Funktionen wie bisher auch ohne fn-Prefix aufrufen lassen. Ich mag allerdings die Unterscheidung zwischen z. B. fn:current-date(), also einer XPath-Funktion gegenüber format-date(), also einer XSLT-Funktion.

        Es kann auch zu Problemen mit 1.0-Stylesheets kommen, weil unter 2.0 alles auf Sequenzen abgebildet wird.

        XML-Ausschnitt:

        <a>
        <b>Inhalt 1</b>
        <b>Inhalt 2</b>
        <b>Inhalt 3</b>
        </a>

        Die Abfrage <xsl:value-of select="a/b"/> ergibt unter 1.0 lediglich Inhalt 1, aber unter 2.0 eben die Sequenz aller b-Inhalte! Man kann nun a/b[1] abfragen und erhält unter beiden Versionen den ersten Inhalt. Alternativ kann man dem xsl:value-of-Element das Attribut version="1.0" zuweisen und somit verhält es sich an dieser Stelle wie unter 1.0 gewohnt.

        Ansonsten kann ich die 2.0-Versionen nur empfehlen, denn es geht Vieles einfacher und vor allem mit weniger rekursiven Templateaufrufen ab. Die Möglichkeiten zur Definition eigener Funktionen (xsl:function) und zur Ausgabe von mehreren Ergebnisdokumenten innerhalb einer Transformation (xsl:result-document) sind nur zwei der nützlichen neuen Techniken.

        Comment


        • #5
          ok verstehe. recht herzlichen dank nochmal und schönes wochenende

          Comment

          Working...
          X