6

XSLT を使用して YouTube の URL を解析し、その URL からビデオ ID のみを取得したいと考えています。XSLT を使用してこれを行う最善の方法は何ですか?

したがって、URL が次の場合: 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>
4

2 に答える 2

4

I. この 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

Ⅱ.この XPath 1.0 式:

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

必要な結果が生成されます。

注意してください:

vどちらのソリューションも、指定されたクエリ文字列パラメーターが最初のものでなくても、または最後のものであっても、必要な文字列を抽出します。

于 2012-07-08T01:20:59.457 に答える
3

XSLT / XPathは文字列処理(特に1.0)には最適ではありませんが、substring-after()substring-before()関数を組み合わせることで必要なものを実現できます。

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

(YTURLがXSLTvar 、、に格納され$yt_urlており、に&エスケープされていると想定します&amp;)。

このXMLプレイグラウンドでのデモ

于 2012-07-07T21:10:14.777 に答える