XSL捕获URL Params

时间:2015-01-13 23:39:20

标签: xslt restful-url

无法使用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,但它没有多大帮助

1 个答案:

答案 0 :(得分:0)

虽然输入不清楚,但是作为示例:给定输入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时递归调用自身的模板/

对于每次调用,使用url减少参数substring-after(),并增加参数position