Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 将URL变量传递到xsl_Xml_Xslt_Xpath_Xslt 1.0 - Fatal编程技术网

Xml 将URL变量传递到xsl

Xml 将URL变量传递到xsl,xml,xslt,xpath,xslt-1.0,Xml,Xslt,Xpath,Xslt 1.0,是否可以将URL变量传递到xsl中 例如。 http:www.somedomain.com/index.aspx?myVar=test&myVar2=anotherTest 我希望能够在xsl文件的逻辑中使用myVar和myVar2的值。 谢谢。当然可以。在xsl:stylesheet元素中使用xsl:param元素并从xsl引擎传递参数 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transfor

是否可以将URL变量传递到xsl中

例如。 http:www.somedomain.com/index.aspx?myVar=test&myVar2=anotherTest

我希望能够在xsl文件的逻辑中使用myVar和myVar2的值。
谢谢。

当然可以。在
xsl:stylesheet
元素中使用
xsl:param
元素并从xsl引擎传递参数

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="url"/>

然后使用字符串函数,例如:

<xsl:variable name="right-part" select="substring-after($url, 'myVar=')"/>
<xsl:value-of select="substring-before(substring-before($right-part, 'myVar2='), '&amp;')"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="substring-after($right-part, 'myVar2=')"/>

|

这里有一个更通用的转换,它从给定URL获取任意数量的查询字符串参数

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pUrl" select=
 "'http:www.somedomain.com/index.aspx?myVar=test&amp;myVar2=anotherTest&amp;myVar3=yetAnotherTest'"/>

 <xsl:template match="/">
     <xsl:call-template name="GetQueryStringParams"/>
 </xsl:template>

 <xsl:template name="GetQueryStringParams">
  <xsl:param name="pUrl" select="$pUrl"/>

      <xsl:variable name="vQueryPart" select=
      "substring-before(substring-after(concat($pUrl,'?'),
                                        '?'),
                      '?')"/>

      <xsl:variable name="vHeadVar" select=
       "substring-before(concat($vQueryPart,'&amp;'), '&amp;')"/>

       <xsl:element name="{substring-before($vHeadVar, '=')}">
         <xsl:value-of select="substring-after($vHeadVar, '=')"/>
       </xsl:element>

    <xsl:variable name="vRest" select="substring-after($vQueryPart, '&amp;')"/>

    <xsl:if test="string-length($vRest) > 0">
       <xsl:call-template name="GetQueryStringParams">
         <xsl:with-param name="pUrl" select=
         "concat('?', substring(substring-after($vQueryPart, $vHeadVar), 2))"/>
       </xsl:call-template>
    </xsl:if>
 </xsl:template>
</xsl:stylesheet>
<myVar>test</myVar>
<myVar2>anotherTest</myVar2>
<myVar3>yetAnotherTest</myVar3>

将此转换应用于任何XML文档(未使用)时,将生成所需的正确结果

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pUrl" select=
 "'http:www.somedomain.com/index.aspx?myVar=test&amp;myVar2=anotherTest&amp;myVar3=yetAnotherTest'"/>

 <xsl:template match="/">
     <xsl:call-template name="GetQueryStringParams"/>
 </xsl:template>

 <xsl:template name="GetQueryStringParams">
  <xsl:param name="pUrl" select="$pUrl"/>

      <xsl:variable name="vQueryPart" select=
      "substring-before(substring-after(concat($pUrl,'?'),
                                        '?'),
                      '?')"/>

      <xsl:variable name="vHeadVar" select=
       "substring-before(concat($vQueryPart,'&amp;'), '&amp;')"/>

       <xsl:element name="{substring-before($vHeadVar, '=')}">
         <xsl:value-of select="substring-after($vHeadVar, '=')"/>
       </xsl:element>

    <xsl:variable name="vRest" select="substring-after($vQueryPart, '&amp;')"/>

    <xsl:if test="string-length($vRest) > 0">
       <xsl:call-template name="GetQueryStringParams">
         <xsl:with-param name="pUrl" select=
         "concat('?', substring(substring-after($vQueryPart, $vHeadVar), 2))"/>
       </xsl:call-template>
    </xsl:if>
 </xsl:template>
</xsl:stylesheet>
<myVar>test</myVar>
<myVar2>anotherTest</myVar2>
<myVar3>yetAnotherTest</myVar3>
测试
另一项测试
yetAnotherTest

然后我需要将URL拆分为多个部分才能访问myVar和myVar2的值?太棒了。非常感谢你的帮助。正是我想要的。@user1001421和Kirill:您可能希望看到一个更通用的解决方案,该解决方案可以从URL获取所有(预先未知的数字)查询字符串参数。对不起,Dimitre。我刚刚又问了这个问题。这看起来非常令人印象深刻,我一定会尝试一下。谢谢你抽出时间。