7

要素内の文字の最後の出現を見つけることができる必要があります。

例えば:

<mediaurl>http://www.blah.com/path/to/file/media.jpg</mediaurl>

を使って見つけようとするsubstring-before(mediaurl, '.')substring-after(mediaurl, '.')、もちろん最初のドットに一致します。

ファイル拡張子はどのように取得しますか?基本的に、このようなパスからファイル名と拡張子を取得する必要がありますが、XSLTを使用してそれを行う方法についてはかなり困惑しています。

4

4 に答える 4

14

以下は、XSLT 1.0 で必要な出力を生成するテンプレートの例です。

<xsl:template name="getExtension">
<xsl:param name="filename"/>

  <xsl:choose>
    <xsl:when test="contains($filename, '.')">
    <xsl:call-template name="getExtension">
      <xsl:with-param name="filename" select="substring-after($filename, '.')"/>
    </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$filename"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template match="/">
    <xsl:call-template name="getExtension">
        <xsl:with-param name="filename" select="'http://www.blah.com/path/to/file/media.jpg'"/>
    </xsl:call-template>
</xsl:template>
于 2008-08-19T15:34:44.903 に答える
4

XSLT 2.0 を使用している場合は、次のように簡単です。

 <xsl:variable name="extension" select="tokenize($filename, '\.')[last()]"/>

そうでない場合は、少し難しいです。O'Reilly XSLT Cookbookに良い例があります。「文字列のトークン化」を検索してください。

利用可能な場合は、EXSLT関数もあると思います。

于 2008-08-18T14:27:21.327 に答える
0

参考までに、この問題は通常、XSLTでは「substring-after-last」と呼ばれます。

于 2008-08-26T13:21:52.203 に答える
0

「/」でトークン化し、配列から最後の要素を取得するのはどうですか?

Example: tokenize("XPath is fun", "\s+")
Result: ("XPath", "is", "fun")

いつか XSLT フィドラーでした...今は連絡がありません。しかし、HTH

于 2008-08-18T12:55:43.680 に答える