سؤال

أنا بحاجة إلى أن تكون قادرة على العثور على الماضي وقوع حرف داخل عنصر.

على سبيل المثال:

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

إذا كنت تحاول العثور عليه من خلال استخدام substring-before(mediaurl, '.') و substring-after(mediaurl, '.') بعد ذلك سوف بالطبع المباراة على أول نقطة.

كيف يمكنني الحصول على ملف التمديد ؟ أساسا أنا بحاجة للحصول على اسم الملف و امتداد من مسار مثل هذا, ولكن أنا تماما الحيرة في كيفية القيام بذلك باستخدام XSLT.

هل كانت مفيدة؟

المحلول

التالي هو مثال على القالب من شأنها أن تنتج المخرجات المطلوبة في 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>

نصائح أخرى

إذا كنت تستخدم XSLT 2.0, فإنه من السهل:

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

إذا كنت لا, انها قليلا أكثر صعوبة.هناك مثال جيد من أورايلي XSLT طبخ.البحث عن "Tokenizing السلسلة".

أعتقد أن هناك أيضا EXSLT وظيفة ، إذا كان لديك المتاحة.

ماذا عن tokenize مع "/" وأخذ آخر عنصر من عناصر المصفوفة ؟

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

كان XSLT عازف الكمان مرة أخرى في وقت ما...فقدت الاتصال الآن.ولكن HTH

للإشارة هذه المشكلة عادة ما يسمى "فرعية بعد آخر" في XSLT.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top