I. 这个 XPath 2.0 表达式:
substring-after(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], 'v=')
产生想要的、正确的结果。
或者,可以使用稍短的:
tokenize(tokenize($pUrl, '[?|&]')[starts-with(., 'v=')], '=')[2]
这是一个完整的 XSLT 2.0 转换:
<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>
当将此转换应用于任何 XML 文档(未使用)时,将产生所需的正确结果:
qadqO3TOvbQ
二、这个 XPath 1.0 表达式:
concat
(substring-before(substring-after(concat($pUrl,'&'),'?v='),'&'),
substring-before(substring-after(concat($pUrl,'&'),'&v='),'&')
)
产生想要的结果。
请注意:
即使命名的查询字符串参数v
不是第一个,甚至在它是最后一个的情况下,两种解决方案都会提取所需的字符串。