2012-07-07 16 views
6

XSLT kullanarak bir youtube url'yi ayrıştırmak ve yalnızca bu URL'den Video Kimliği almak istiyorum. XSLT kullanarak bunu yapmanın en iyi yolu nedir?XSLT kullanarak bir YouTube URL'sini nasıl ayrıştırabilirim?

Yani, url ise: http://www.youtube.com/watch?v=qadqO3TOvbQ&feature=channel&list=UL

Ben sadece qadqO3TOvbQ istiyor ve bir gömme kodunun koydu: (özellikle 1,0)

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

cevap

3

XSLT/XPath işleme dizeye uygun iyi değil ama

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

(

YT UR varsayar: Eğer substring-after() ve substring-before() fonksiyonlarını karıştırılarak gerekenleri elde edebilirsiniz L, bir XSLT var, $yt_url'da saklanır ve 'un &amp;'a kaçtığı anlamına gelir). Bu this XML Playground

+0

Sorun, özellikte bitip bitmeyeceğini bilmiyorum ... kullanıcı URL'yi kopyalayıp çalışmasını bekler. Benim işim ne olursa olsun ayrıştırmak. ? V = ve & arasında düşünüyordum, ancak ampersan olmayabilir. – Armstrongest

+0

Tamam ... xmlplayground için tamamen +1 ... BÜYÜK site. Ayrıca, buradaki çözümü '\t Armstrongest

+0

Teşekkürler - Birkaç hafta önce başlattım.Spread da word :) İhtiyacın olan sonucu aldığına sevindim. – Utkanos

4

I. az

Demo Bu XPath 2.0 ifade:

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

aranan, doğru sonucu üretir. Burada

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

tam XSLT 2.0 dönüşüm olup:

<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> 

bu dönüşüm herhangi bir XML belgesi uygulanır (

Alternatif olarak, bir biraz daha kısa kullanabilir kullanılmıyor, istenilen, doğru sonuç üretildi:

qadqO3TOvbQ 

II. Bu XPath 1.0 ifade:

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

istenilen sonuca üretir.

not Do:

Her iki çözüm sonuncusu olduğunda v adlı sorgu dizesi parametresi birincisi hatta durumda olmasa bile aranan dize ayıklamak.

+0

Xpath 1.0 ve XSLT 2.0'ı sağladığınızı seviyorum. Ben ilk kez xslt 2.0'ı gördüğümde ve kodun kodunu belirlediğimde (ben de deneyeceğim) bütün cevabı okumadım. – Armstrongest

+0

@ Atømix: Rica ederim. –