Это простое и чистое решение XSLT 1.0 , состоящее всего из 47 строк, половина из которых является закрывающими тегами. следующее преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:param name="pNewLink"
select="'http://stream001.radio.hu:8000/content/'"/>
<xsl:param name="pNewExt" select="'.mp3'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="link">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:variable name="vFName">
<xsl:call-template name="GetFileName">
<xsl:with-param name="pFPath" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat($pNewLink,$vFName,$pNewExt)"/>
</xsl:copy>
</xsl:template>
<xsl:template name="GetFileName">
<xsl:param name="pFPath"/>
<xsl:choose>
<xsl:when test="not(contains($pFPath, '/'))">
<xsl:value-of select="substring-before($pFPath, '.')"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="GetFileName">
<xsl:with-param name="pFPath"
select="substring-after($pFPath, '/')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному исходному XML-документу :
<item>
<title>2008. november 23.</title>
<link>http://www.mr1-kossuth.hu/m3u/0039c36f_3003051.m3u</link>
<description>........</description>
<pubDate>Wed, 26 Nov 2008 00:00:00 GMT</pubDate>
</item>
дает желаемый результат :
<item>
<title>2008. november 23.</title>
<link>http://stream001.radio.hu:8000/content/0039c36f_3003051.mp3</link>
<description>........</description>
<pubDate>Wed, 26 Nov 2008 00:00:00 GMT</pubDate>
</item>
Обратите внимание на следующие особенности этого решения:
Мы используем шаблон проектирования XSLT, используя и переопределяя преобразование идентичности .
Шаблон с именем «GetFileName » извлекает из полного URL-адреса (переданного в качестве параметра) только имя файла с расширением файла. Этот является хорошим примером именованного шаблона, который рекурсивно вызывает себя .
- Составляющие желаемых новых URL указываются как глобальные
<xsl:param>
s