I. Wyrażenie XPath 2.0:
substring-after(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], 'v=')
produkuje Wanted, poprawny wynik.
Alternatywnie, można użyć nieco krótszy:
tokenize(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], '=')[2]
Powyżej znajduje się pełna XSLT 2.0 Transformacja:
<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>
Kiedy transformacja ta jest stosowana na dowolnym dokumencie XML (nieużywany), pożądany, prawidłowy wynik jest produkowany:
qadqO3TOvbQ
II. To wyrażenie XPath 1.0:
concat
(substring-before(substring-after(concat($pUrl,'&'),'?v='),'&'),
substring-before(substring-after(concat($pUrl,'&'),'&v='),'&')
)
produkuje poszukiwanych wynik.
Należy pamiętać:
Oba rozwiązania wyodrębnić poszukiwany ciąg nawet jeśli parametr ciąg kwerendy o nazwie v
nie jest pierwszym ani nawet w przypadku, gdy jest to ostatnie.
Problem polega na tym, że nie wiem, czy zakończy się funkcja ... użytkownik po prostu skopiuje adres URL i będzie oczekiwać, że zadziała. Moja praca polega na analizowaniu wszystkiego. Pomyślałem pomiędzy? V = i &, ale może nie mieć ampersand. – Armstrongest
Okay ... całkowicie +1 za xmlplayground ... GREAT. Zmodyfikowaliśmy tam również rozwiązanie na "\t
Armstrongest
Dzięki - uruchomiłem go kilka tygodni temu.Rozwiń słowo :) Cieszę się, że uzyskałeś wynik, którego potrzebowałeś. – Utkanos