2012-07-07 14 views
6

मैं एक्सएसएलटी का उपयोग कर यूट्यूब यूआरएल पार्स करना चाहता हूं और उस यूआरएल से केवल वीडियो आईडी प्राप्त करना चाहता हूं। एक्सएसएलटी का उपयोग करके ऐसा करने का सबसे अच्छा तरीका क्या है?एक्सएसएलटी का उपयोग करके मैं यूट्यूब यूआरएल का विश्लेषण कैसे कर सकता हूं?

तो, अगर यूआरएल है: http://www.youtube.com/watch?v=qadqO3TOvbQ&feature=channel&list=UL

मैं केवल qadqO3TOvbQ चाहते हैं और एक एम्बेड कोड में डाल दिया: (विशेष रूप से 1,0)

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

उत्तर

3

XSLT/XPath स्ट्रिंग से निपटने के लिए अनुकूल नहीं है, लेकिन सबसे अच्छा आप प्राप्त कर सकते हैं कि आप क्या substring-after() और substring-before() कार्यों को मिलाकर की जरूरत है:

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

(मान लिया गया YT यू.आर. एल को एक्सएसएलटी var, $yt_url में संग्रहीत किया जाता है, और इसमें &&amp; से बच निकला है)। इस this XML Playground

+0

समस्या यह नहीं है कि मुझे पता नहीं है कि यह सुविधा में समाप्त होगा या नहीं ... उपयोगकर्ता केवल यूआरएल की प्रतिलिपि बनाएगा और इसे काम करने की उम्मीद करेगा। मेरा काम जो भी आता है उसे पार्स करना है। मैं? V = और & के बीच सोच रहा था लेकिन इसमें एम्परसैंड नहीं हो सकता है। – Armstrongest

+0

ठीक है ... xmlplayground के लिए पूरी तरह से +1 ... ग्रेट साइट। इसके अलावा, मैंने वहां समाधान को \t उचित यूआरएल भी पकड़ने के लिए। – Armstrongest

+0

धन्यवाद - मैंने इसे कुछ हफ्ते पहले लॉन्च किया था।दा शब्द फैलाओ :) खुशी है कि आपको जिस परिणाम की आवश्यकता है उसे मिला। – Utkanos

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 

द्वितीय। यह 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

मुझे प्यार है कि आपने एक्सपैथ 1.0 और एक्सएसएलटी 2.0 प्रदान किया है। मैंने पहली बार पूरे जवाब को नहीं पढ़ा जब मैंने xslt 2.0 और टोकनिज कोड देखा (जिसे मैं भी कोशिश करने जा रहा हूं) – Armstrongest

+0

@ एटॉमिक्स: आपका स्वागत है। –

संबंधित मुद्दे

 संबंधित मुद्दे