I. Questo XPath 2.0 espressione:
substring-after(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], 'v=')
produce il desiderato, risultato corretto.
alternativa, si può utilizzare il leggermente più corta:
tokenize(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], '=')[2]
Ecco una completa XSLT 2.0 trasformazione:
<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>
volta questa trasformazione viene applicato su qualsiasi documento XML (non utilizzato), il ricercato, il risultato corretto è prodotto:
qadqO3TOvbQ
II. Questo XPath 1.0 espressione:
concat
(substring-before(substring-after(concat($pUrl,'&'),'?v='),'&'),
substring-before(substring-after(concat($pUrl,'&'),'&v='),'&')
)
produce il risultato voluto.
Do atto:
Entrambe le soluzioni estrarre la stringa desiderata, anche se il parametro di stringa di query di nome v
non è il primo o anche nel caso in cui esso sia l'ultimo.
Problema è che non so se finirà in funzione ... l'utente semplicemente copierà l'url e si aspetta che funzioni. Il mio lavoro è analizzare qualunque cosa arrivi. Stavo pensando tra? V = e & ma potrebbe non avere la e commerciale. – Armstrongest
Ok ... totalmente +1 per xmlplayground ... GRANDE sito. Inoltre, ho modificato la soluzione lì per '\t 'per catturare anche gli URL appropriati. –
Armstrongest
Grazie - l'ho lanciato qualche settimana fa.Spread da word :) Sono contento che tu abbia ottenuto il risultato di cui avevi bisogno. – Utkanos