I. Esta XPath 2.0 expresión:
substring-after(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], 'v=')
produce los, resultado correcto deseada.
Alternativamente, se puede utilizar el ligeramente más corto:
tokenize(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], '=')[2]
Aquí es una completa XSLT 2.0 transformación:
<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>
Cuando se aplica esta transformación en cualquier documento XML (no utilizado), el resultado correcto y deseado se produce:
qadqO3TOvbQ
II. Esta expresión XPath 1.0:
concat
(substring-before(substring-after(concat($pUrl,'&'),'?v='),'&'),
substring-before(substring-after(concat($pUrl,'&'),'&v='),'&')
)
produce el resultado deseado.
hacer la nota:
Ambas soluciones extraer la cadena deseada, incluso si el parámetro de cadena de consulta con nombre v
no es el primero, o incluso en el caso cuando se trata de la última.
El problema es que no sé si terminará en función ... el usuario simplemente copiará la URL y espera que funcione. Mi trabajo es analizar lo que venga. Estaba pensando entre? V = y &, pero es posible que no tenga el signo &. – Armstrongest
Bien ... totalmente +1 para xmlplayground ... EXCELENTE sitio. Además, modifiqué la solución a '\t 'para atrapar URLs adecuadas también. –
Armstrongest
Gracias - Lo lancé hace unas semanas.Spread da word :) Me alegra que hayas obtenido el resultado que necesitabas. – Utkanos