studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones xml xslt

xml - programacion - Búsqueda inversa en una cadena



manual de programacion android pdf (4)

¿Qué tal tokenizar con "/" y tomar el último elemento de la matriz?

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

Era un violinista XSLT en algún momento ... perdido el contacto ahora. Pero HTH

Necesito poder encontrar la última ocurrencia de un personaje dentro de un elemento.

Por ejemplo:

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

Si trato de localizarlo usando substring-before(mediaurl, ''.'') Y substring-after(mediaurl, ''.'') Entonces, por supuesto, coincidirá en el primer punto.

¿Cómo obtendré la extensión de archivo? Esencialmente, necesito obtener el nombre del archivo y la extensión de una ruta como esta, pero estoy bastante perplejo en cuanto a cómo hacerlo usando XSLT.


Si está utilizando XSLT 2.0, es fácil:

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

Si no lo eres, es un poco más difícil. Hay un buen ejemplo del O''Reilly XSLT Cookbook . Buscar "Tokenizar una cadena".

Creo que también hay una función EXSLT, si tienes eso disponible.


El siguiente es un ejemplo de una plantilla que produciría la salida requerida en 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>


Como referencia, este problema generalmente se llama "substring-after-last" en XSLT.