XSL 捕获 URL 参数
XSL to capture URL Params
无法使用 XSLT 提取参数,
例如:http://www.example.com/AB/100/123456/09/8
使用 XSLT 需要提取 var1=AB、Var2=100、Var3=123456、var4=09、var5=8,所有参数都是必需的。 var3 可以接受 1-999999,有人可以分享一些想法吗
试过 Substring 但没有多大帮助
虽然输入不清楚,举个例子:给定一个输入XML
<root>
<url>http://www.example.com/AB/100/123456/09/8</url>
</root>
遵循 XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="url">
<xsl:call-template name="parse">
<xsl:with-param name="url" select="substring-after(.,'//')" />
<xsl:with-param name="position" select="1" />
</xsl:call-template>
</xsl:template>
<xsl:template name="parse">
<xsl:param name="url" />
<xsl:param name="position" />
<xsl:choose>
<xsl:when test="contains(substring-after($url, '/'),'/')">
<xsl:value-of select="concat('Var', $position, ': ')" />
<xsl:value-of select="substring-before(substring-after($url, '/'),'/')" />
<xsl:text>, </xsl:text>
<xsl:call-template name="parse">
<xsl:with-param name="url" select="substring-after($url, '/')" />
<xsl:with-param name="position" select="$position + 1" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('Var', $position, ': ')" />
<xsl:value-of select="substring-after($url,'/')" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:transform>
产生输出
Var1: AB, Var2: 100, Var3: 123456, Var4: 09, Var5: 8
使用模板 parse
,它在 url
包含 /
时递归调用自身。
对于每次调用,使用 substring-after()
减少参数 url
并增加参数 position
。
无法使用 XSLT 提取参数,
例如:http://www.example.com/AB/100/123456/09/8
使用 XSLT 需要提取 var1=AB、Var2=100、Var3=123456、var4=09、var5=8,所有参数都是必需的。 var3 可以接受 1-999999,有人可以分享一些想法吗
试过 Substring 但没有多大帮助
虽然输入不清楚,举个例子:给定一个输入XML
<root>
<url>http://www.example.com/AB/100/123456/09/8</url>
</root>
遵循 XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="url">
<xsl:call-template name="parse">
<xsl:with-param name="url" select="substring-after(.,'//')" />
<xsl:with-param name="position" select="1" />
</xsl:call-template>
</xsl:template>
<xsl:template name="parse">
<xsl:param name="url" />
<xsl:param name="position" />
<xsl:choose>
<xsl:when test="contains(substring-after($url, '/'),'/')">
<xsl:value-of select="concat('Var', $position, ': ')" />
<xsl:value-of select="substring-before(substring-after($url, '/'),'/')" />
<xsl:text>, </xsl:text>
<xsl:call-template name="parse">
<xsl:with-param name="url" select="substring-after($url, '/')" />
<xsl:with-param name="position" select="$position + 1" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('Var', $position, ': ')" />
<xsl:value-of select="substring-after($url,'/')" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:transform>
产生输出
Var1: AB, Var2: 100, Var3: 123456, Var4: 09, Var5: 8
使用模板 parse
,它在 url
包含 /
时递归调用自身。
对于每次调用,使用 substring-after()
减少参数 url
并增加参数 position
。