2013-02-01 51 views
1

我有一個rss提要,需要轉換爲不同的XML模式。同時,將mp3文件名解析爲新字段。我似乎對的變換(書面對我來說),其餘工作一個xsl,但我不知道如何讓這樣的:在xsl中使用正則表達式解析一個mp3文件名

<enclosure url="http://www.fffff.com/pts/redirect.mp3/audio.xxyy.org/musiccheck/musiccheck20130118pod.mp3" length="0" type="audio/mpeg"></enclosure> 

轉成這樣:

<fileIdentifier source="Theme">musiccheck20130118pod</fileIdentifier> 

回答

0

這裏是XSLT 1.0不使用正則表達式的完整解決方案:

<xsl:template match="enclosure"> 
<xsl:variable name="url" select="./@url"/> 
<xsl:variable name="name"> 
    <xsl:call-template name="last-substring-after"> 
    <xsl:with-param name="string" select="$url"/> 
    <xsl:with-param name="separator" select="'/'"/> 
    </xsl:call-template> 
</xsl:variable> 
<fileIdentifier source="Theme"> 
<xsl:value-of select="substring-before($name, '.')"/> 
</fileIdentifier> 
</xsl:template> 


<xsl:template name="last-substring-after"> 
    <xsl:param name="string"/> 
    <xsl:param name="separator"/> 
    <xsl:choose> 
    <xsl:when test="contains($string, $separator)"> 
     <xsl:call-template name="last-substring-after"> 
     <xsl:with-param name="string" 
         select="substring-after($string, $separator)"/> 
     <xsl:with-param name="separator" 
         select="$separator"/> 
     </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$string"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

輸出將是─

<fileIdentifier source="Theme">musiccheck20130118pod</fileIdentifier> 

Source

+1

這是美好的,完美的作品。謝謝 – jackpass

0

製作有關網址格式的一些假設,即文件名以.mp3的最後一件事它:

/[\S\s]*?url="[\S\s]*?\/([\w]+?\.mp3)".*?/$1/ 

就注意到你想要得到什麼,第二部分將是:

/[\S\s]*?url="[\S\s]*?\/([\w]+?\.mp3)".*?/<fileIdentifier source="Theme">$1</fileIdentifier>/ 
+0

更新 - 有一個錯誤。 – Matthew