Announcement

Collapse
No announcement yet.

Pfad kürzen zu Dateinamen

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

  • Pfad kürzen zu Dateinamen

    Hi..

    Ich habe ein Problem...

    Ich habe einen Pfad : " file:///q://test/test2/test3/dateiname.pdf"

    nun möchte ich gerne einen Link erzeugen der zu dieser Datei zeigt...
    das Ganze habe ich auch schon realisiert aber leider steht dann da:

    file:///q://test/test2/test3/dateiname.pdf und das linkt dann zu file:///q://test/test2/test3/dateiname.pdf

    ich will aber "dateiname" und das linkt dann zu file:///q://test/test2/test3/dateiname.pdf

    kann man irgendwie den Pfad kürzen? so wie man das in PHP kann oder so?

  • #2
    Mit XSLT/XPath 2.0 so machbar:
    Code:
    <xsl:variable name="pfad" select="'file:///q://test/test2/test3/dateiname.pdf'"/>
    <xsl:value-of select="fn:substring-before(fn:tokenize($pfad,'/')[last()],'.')"/>
    <!-- dateiname -->
    Die aufwändigere Alternative wäre die rekursive Zerlegung des Strings.

    Comment


    • #3
      Hä? Raff ich nicht....

      bislang mache ich dass:

      PHP Code:
      <a href="{str[@name='url']}"><xsl:value-of select="str[@name='url']"/></a
      wie muss ich dass nun machen? irgendwie verstehe ich dass nicht ganz.. bin mir sicher dass es richtig ist aber verstehen tu ich es nicht..

      Jörg

      Comment


      • #4
        Vermutlich soll es so aussehen (wie gesagt mit 2.0-Prozessor umsetzbar):
        Code:
        <a href="{str[@name='url']}">
          <xsl:value-of select="fn:substring-before(fn:tokenize(str[@name='url'],'/')[last()],'.')"/>
        </a>

        Comment


        • #5
          Hmm, also ich verwende Jetty 6.14 oder so in einer Live Demo...
          da scheint es nicht zu gehen...

          nen vorschlag wie ich dem das beibringen kann?

          Comment


          • #6
            Dieses Tool kenne ich nicht. Saxon oder AltovaXML wären geeignet. Hier ein Ansatz für XSLT/XPath 1.0 mit separatem Template:
            Code:
            <!-- Haupt-Template: ... entsprechend anpassen -->
            <xsl:template match="...">
              <a href="{str[@name='url']}">
                <xsl:call-template name="dateiname">
                  <xsl:with-param name="str" select="str[@name='url']"/>
                </xsl:call-template>
              </a>
            </xsl:template>
            
            <!-- Template zur Ausgabe des Dateinamens: -->
            <xsl:template name="dateiname">
              <xsl:param name="str"/> 
              <xsl:choose>
                <xsl:when test="string-length($str) > 0 and contains($str,'/')">
                  <xsl:call-template name="dateiname">
                    <xsl:with-param name="str" select="substring($str,2)"/>
                  </xsl:call-template>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:value-of select="substring-before($str,'.')"/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:template>

            Comment


            • #7
              Hi...

              Also ich habe Jetty mal den Saxon gegeben und er scheint auch zu Funktionieren,

              dennoch bekomme ich einen Fehler, wenn ich dass:

              HTML Code:
              <a href="{str[@name='url']}">
                <xsl:value-of select="fn:substring-before(fn:tokenize(str[@name='url'],'/')[last()],'.')"/>
              </a>
              mache...
              ne ahnung woran das liegen kann?
              wie kann ich testen ob der 2.0 prozessor wirklich genommen wird?

              Comment


              • #8
                Wenn es Saxon 9 ist, dann sollte 2.0 klappen. Ist version="2.0" bei xsl:stylesheet vorhanden und der fn-Namensraum deklariert (xmlns:fn="http://www.w3.org/2005/xpath-functions")?

                Comment


                • #9
                  *g* nen fn Namensraum habe ich nicht deklariert.. habe keine ahnung wie das Gehen soll...
                  hmm

                  Comment


                  • #10
                    Kaum macht man es Richtig *g* gehts auch...

                    Danke klappt super....

                    Aber mal ne andere Frage wenn ich diese URL habe.. kann ich dann über den selben weg auch den Pfad änder?

                    zum beispiel:

                    file://q:/test1/test2/test3/datei.pdf in http://12345.de/test3/datei.pdf

                    Comment


                    • #11
                      Das kommt auf den bekannten Part an, ein Ansatz:
                      Code:
                      <xsl:variable name="url" select="'file://q:/test1/test2/test3/datei.pdf'"/>
                      <xsl:value-of select="concat('http://12345.de',substring-after($url,'test2'))"/>

                      Comment


                      • #12
                        Hallo Forum,

                        ich nutze diese Funktion mit Saxon 9.4 auch und zwar in der folgenden Form ohne "fn" sondern mit "str", weil er sonst bei mir nichts findet:

                        Code:
                        <xsl:variable name="imagePath">
                        <xsl:value-of select="Image/Link/@LinkResourceURI"/>
                        </xsl:variable>
                        <xsl:variable name="imageName">
                        <xsl:value-of select="substring-before(str:tokenize($imagePath,'/')[last()],'.')"/>
                        </xsl:variable>
                        I.d.F. funktionert die Funktion komischerweise nicht bei Dateinamen, die auf 2 Buchstaben enden (z.B. *.ai). Wie gesagt ich habe die hier vorgeschlagene Version bereits getestet.

                        Hier noch mein Namespace:

                        Code:
                        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                        xmlns:fn="http://www.w3.org/2005/xpath-functions" version="2.0"
                        xmlns:xs="http://www.w3.org/2001/XMLSchema"
                        xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging"
                        xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"
                        xmlns:str="http://exslt.org/strings">
                        Danke für jede Hilfe.

                        Gruss
                        Dom

                        Comment


                        • #13
                          Gib mal ein Beispiel für den Inhalt von @LinkResourceURI und was daraus werden soll.

                          Comment


                          • #14
                            Entschuldigung, ich habe an anderer Stelle einen Fehler gemacht. Der Pfad war anders für Bilder die auf AI oder PDF lauten.

                            Danke vielmals
                            Gruss
                            Dom

                            Comment

                            Working...
                            X