情况是,我有两个xslt文件:一个从我的ASP.NET代码中调用,第二个xslt文件被导入。
我想要完成的是将一个参数传递给第一个xslt,以便第二个xslt(在第一个xslt中导入的那个)可以读取它。
我的c#代码如下所示:
var oArgs = new XsltArgumentList();
oArgs.AddParam("fbLikeFeatureName", "", "Facebook_Like_Button");
ltlContentBody.Text = xmlUtil.TransformXML(oXmlDoc, Server.MapPath(eSpaceId + "/styles/ExploringXSLT/ExploreContentObjects.xslt"), true);我以这种方式捕获第一个xslt中的参数:
<xsl:param name="fbLikeFeatureName" />然后,将其传递给第二个xslt,如下所示(之前,我导入了该文件):
<xsl:call-template name="Articles">
<xsl:with-param name="fbLikeFeatureName"></xsl:with-param>
</xsl:call-template>最后,我捕获了第二个xslt文件上的参数,如下所示:
<xsl:value-of select="$fbLikeButtonName"/>我做错了什么?我是xslt的新手。
发布于 2010-05-14 04:49:16
您不需要将参数从第一个样式表“传递”到导入的样式表。当您在第一个样式表的顶层声明参数时,它对所有导入的样式表都自动可见。考虑以下样式表:
template1.xsl:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="template2.xsl"/>
<xsl:param name="input-param"/>
<xsl:template match="/">
<xsl:apply-templates select="doc"/>
</xsl:template>
</xsl:stylesheet>它导入template2.xsl:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="doc">
<xsl:value-of select="$input-param"/>
</xsl:template>
</xsl:stylesheet>然后,我转换了以下文档:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="template1.xsl"?>
<doc/>将输入参数" input -param“设置为"This is a test”。我得到以下输出(Saxon-B 9.1.0.7):
This is a test发布于 2010-05-14 03:56:16
在将参数传递给Articles模板时,您没有设置该参数的值。试一试
<xsl:call-template name="Articles">
<xsl:with-param name="fbLikeButtonName" select="$fbLikeFeatureName"/>
</xsl>和十个
<xsl:template name="Articles">
<xsl:param name="fbLikeButtonName"/>
...
<xsl:value-of select="$fbLikeButtonName"/>
...
</xsl:template>当使用with-param时,名称属性被设置为被调用模板使用的参数的名称(本例中为Articles)。然后使用select (或xsl:with-param的主体)设置该值。
https://stackoverflow.com/questions/2829803
复制相似问题