如何使用XSLT解析YouTube网址?

时间:2012-07-07 20:57:33

标签: parsing url xslt query-string c1-cms

我想使用XSLT解析一个youtube网址,只从该网址获取视频ID。使用XSLT的最佳方法是什么?

因此,如果网址为:http://www.youtube.com/watch?v=qadqO3TOvbQ&feature=channel&list=UL

我只想要qadqO3TOvbQ并将其放入嵌入代码中:

<iframe width="560" height="315" src="http://www.youtube.com/embed/qadqO3TOvbQ" frameborder="0" allowfullscreen=""></iframe>

2 个答案:

答案 0 :(得分:4)

<强>予。这个XPath 2.0表达式:

substring-after(tokenize($pUrl, '[?|&amp;]')[starts-with(., 'v=')], 'v=')

生成想要的正确结果

或者,可以使用略短的:

tokenize(tokenize($pUrl, '[?|&amp;]')[starts-with(., 'v=')], '=')[2]

这是一个完整的XSLT 2.0转换

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:param name="pUrl" select=
"'http://www.youtube.com/watch?v=qadqO3TOvbQ&amp;feature=channel&amp;list=UL'"/>

 <xsl:template match="/">
   <xsl:sequence select=
    "tokenize(tokenize($pUrl, '[?|&amp;]')[starts-with(., 'v=')], '=')[2]"/>
 </xsl:template>
</xsl:stylesheet>

当对任何XML文档(未使用)应用此转换时,会生成所需的正确结果

qadqO3TOvbQ

<强> II。此XPath 1.0表达式:

 concat
   (substring-before(substring-after(concat($pUrl,'&amp;'),'?v='),'&amp;'),
    substring-before(substring-after(concat($pUrl,'&amp;'),'&amp;v='),'&amp;')
   )

产生想要的结果

请注意

即使名为v的查询字符串参数不是第一个,或者甚至是最后一个查询字符串参数,两个解决方案都会提取所需的字符串。

答案 1 :(得分:3)

XSLT / XPath不是最适合字符串处理(特别是1.0),但您可以通过混合substring-after()substring-before()函数来实现所需:

<xsl:value-of select="substring-before(substring-after($yt_url, '?v='), '&amp;feature')" />

(假设YT URL存储在XSLT var $yt_url中,并且其&已转义为&amp;。)

演示此this XML Playground