I. Dieser XPath 2.0-Ausdruck:
substring-after(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], 'v=')
erzeugt die gewünschte, korrekte Ergebnis.
Alternativ kann man die Verwendung etwas kürzer:
tokenize(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], '=')[2]
Dies ist die komplette XSLT 2.0 Transformation:
<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>
Wenn diese Transformation auf jedem XML-Dokument angewendet wird (nicht verwendet), das gewünschte, korrekte Ergebnis wird erzeugt:
qadqO3TOvbQ
II. Dieser XPath 1.0 Ausdruck:
concat
(substring-before(substring-after(concat($pUrl,'&'),'?v='),'&'),
substring-before(substring-after(concat($pUrl,'&'),'&v='),'&')
)
erzeugt das gewünschte Ergebnis.
Sie beachten Sie:
Beide Lösungen die gewünschte Zeichenfolge, auch wenn die Query-String-Parameter v
ist nicht der erste oder sogar in dem Fall, wenn es das letzte ist benannt extrahieren.
Problem ist, ich weiß nicht, ob es in Funktion enden wird ... der Benutzer die URL einfach kopieren und erwarten, dass es funktioniert. Meine Aufgabe ist es zu analysieren, was auch immer kommt. Ich dachte zwischen? V = und &, aber es kann nicht das kaufmännische Und haben. – Armstrongest
Okay ... total +1 für xmlplayground ... GROSSE Seite. Auch ich modifizierte es um die Lösung zu '\t 'um auch richtige URLs einzufangen. –
Armstrongest
Danke - Ich habe es vor ein paar Wochen gestartet.Spread da Wort :) Ich bin froh, dass Sie das gewünschte Ergebnis erhalten haben. – Utkanos