2012-07-07 57 views

回答

3

XSLT/XPath是不是最適合的字符串處理(1.0尤其是),但你可以實現你通過混合了substring-after()substring-before()哪些功能需要:

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

(假設YT UR L存儲在XSLT var中,$yt_url,並且它的&轉義爲&amp;)。

演示在這個this XML Playground

+0

問題是我不知道它是否會以功能結束...用戶只會複製網址並期望它能夠正常工作。我的工作是解析一切。我在考慮?v =和&,但它可能沒有&符號。 – Armstrongest 2012-07-11 16:42:20

+0

好的...對於xmlplayground ...完全+1網站。此外,我修改瞭解決方案'\t 也要抓住正確的URL。 – Armstrongest 2012-07-11 16:47:10

+0

謝謝 - 我幾周前推出了它。傳播達字:)很高興你得到了你需要的結果。 – Utkanos 2012-07-11 16:57:30

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查詢字符串參數不是第一個,甚至在情況下,當它是最後一個。

+0

我喜歡你提供的Xpath 1.0和XSLT 2.0。我沒有讀全部答案第一次當我看到XSLT 2.0和記號化代碼(我還打算嘗試) – Armstrongest 2012-07-12 17:03:26

+0

@ ATOMIX:不客氣。 – 2012-07-12 17:20:08