2012-07-07 8 views

risposta

3

XSLT/XPath non migliore è adatto a gestire stringa (1.0 in particolare), ma è possibile ottenere quello che ti serve mescolando le substring-after() e substring-before() funzioni:

<xsl:value-of select="substring-before(substring-after($yt_url, '?v='), '&amp;feature')" /> 

(assume il YT UR L è memorizzato in un var XSLT, $yt_url, e ha il suo & scappato a &amp;).

Demo in questa this XML Playground

+0

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

+0

Ok ... totalmente +1 per xmlplayground ... GRANDE sito. Inoltre, ho modificato la soluzione lì per '\t 'per catturare anche gli URL appropriati. – Armstrongest

+0

Grazie - l'ho lanciato qualche settimana fa.Spread da word :) Sono contento che tu abbia ottenuto il risultato di cui avevi bisogno. – Utkanos

4

I. Questo XPath 2.0 espressione:

substring-after(tokenize($pUrl, '[?|&amp;]')[starts-with(., 'v=')], 'v=') 

produce il desiderato, risultato corretto.

alternativa, si può utilizzare il leggermente più corta:

tokenize(tokenize($pUrl, '[?|&amp;]')[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&amp;feature=channel&amp;list=UL'"/> 

<xsl:template match="/"> 
    <xsl:sequence select= 
    "tokenize(tokenize($pUrl, '[?|&amp;]')[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,'&amp;'),'?v='),'&amp;'), 
    substring-before(substring-after(concat($pUrl,'&amp;'),'&amp;v='),'&amp;') 
    ) 

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.

+0

Mi piace che tu abbia fornito Xpath 1.0 e XSLT 2.0. Non ho letto tutta la risposta la prima volta che ho visto xslt 2.0 e codice tokenize (che sto anche andando a provare) – Armstrongest

+0

@ Atømix: prego. –