आई पर
डेमो यह XPath 2.0 अभिव्यक्ति:
substring-after(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], 'v=')
चाहता था, सही परिणाम पैदा करता है।
वैकल्पिक रूप से, एक का उपयोग कर सकते हैं थोड़ा छोटा:
tokenize(tokenize($pUrl, '[?|&]')[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&feature=channel&list=UL'"/>
<xsl:template match="/">
<xsl:sequence select=
"tokenize(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], '=')[2]"/>
</xsl:template>
</xsl:stylesheet>
जब इस बदलाव किसी भी XML दस्तावेज़ पर लागू किया जाता है (उपयोग नहीं किया गया), वांछित, सही परिणाम:
qadqO3TOvbQ
द्वितीय। यह XPath 1.0 अभिव्यक्ति:
concat
(substring-before(substring-after(concat($pUrl,'&'),'?v='),'&'),
substring-before(substring-after(concat($pUrl,'&'),'&v='),'&')
)
वांछित परिणाम पैदा करता है।
ध्यान दें है:
दोनों समाधान वांछित स्ट्रिंग निकालने भले ही क्वेरी स्ट्रिंग पैरामीटर v
नामित पहले एक या यहाँ तक कि मामले में जब यह पिछले एक है नहीं है।
समस्या यह नहीं है कि मुझे पता नहीं है कि यह सुविधा में समाप्त होगा या नहीं ... उपयोगकर्ता केवल यूआरएल की प्रतिलिपि बनाएगा और इसे काम करने की उम्मीद करेगा। मेरा काम जो भी आता है उसे पार्स करना है। मैं? V = और & के बीच सोच रहा था लेकिन इसमें एम्परसैंड नहीं हो सकता है। – Armstrongest
ठीक है ... xmlplayground के लिए पूरी तरह से +1 ... ग्रेट साइट। इसके अलावा, मैंने वहां समाधान को \t उचित यूआरएल भी पकड़ने के लिए। –
Armstrongest
धन्यवाद - मैंने इसे कुछ हफ्ते पहले लॉन्च किया था।दा शब्द फैलाओ :) खुशी है कि आपको जिस परिणाम की आवश्यकता है उसे मिला। – Utkanos