在从C#代码传递的XSLT中使用参数

在从C#代码传递的XSLT中使用参数,c#,.net,sql-server,xml,xslt,C#,.net,Sql Server,Xml,Xslt,我已经完成了将一个xml转换为另一个xml的任务,而转换所需的参数来自多个SQL server表 例如,输入XML有一个产品“XPOZER_90X120” XML: <product exportName="XPOZER_90X120"> <product-options> <option productOptionRef="xpozerFrame"> <plan> <p

我已经完成了将一个xml转换为另一个xml的任务,而转换所需的参数来自多个SQL server表

例如,输入XML有一个产品“XPOZER_90X120”

XML:

<product exportName="XPOZER_90X120">
      <product-options>
        <option productOptionRef="xpozerFrame">
          <plan>
            <period startDate="2015-10-01">
              <price name="true" netBasePrice="34"/>
              <price name="false" netBasePrice="0"/>
            </period>
          </plan>
        </option>
      </product-options>
    </product>
然后在SQL server中执行此操作:

alter assembly XsltTransform
from 'c:\temp\XsltTransform.dll'

alter function ApplyXsltTransform( @inputXML xml, @inputTransform xml )
returns xml
as external name XsltTransform.XsltTransform.Transform

declare @xml  xml
declare @xslt xml

select @xml  = BulkColumn from openrowset( Bulk 'C:\temp\20349600_BE_main.xml', SINGLE_BLOB ) as x 
select @xslt = BulkColumn from openrowset( Bulk 'C:\temp\BE_main.xsl', SINGLE_BLOB ) as x 

select dbo.ApplyXsltTransform( @xml, @xslt )
这可以很好地进行转换,但我找不到任何关于如何将表值作为参数传递给XSLT代码以及如何在XSLT代码中使用它们的信息。 转换成员上有一个XsltArgumentlist参数:

xslt.Transform(inputDataXML.CreateReader(), /*XSLTArgumentList*/, outputWriter, null);

但是如何访问XSLT中的参数呢?

在XSLT模板中,添加如下节点:

<xsl:param name="param1" />

在您的例子中,DataToPass实际上是SQL中的值。

您可能希望在XML中添加一个“参数”节点,并在C代码中设置参数。或者您可能想阅读以下内容:是,但参数名称是从数据库表生成的,因此我无法在其中硬编码名称。参数名称或参数值是从DB表生成的?究竟为什么要从DB表中生成参数名呢?它已经像这样实现了。对于一个简单的问题来说,这是一个超级复杂的解决方案,但我无法改变这一点。在这种情况下,您必须从数据库中读取参数名,然后在
XsltArgumentList.Add
方法中传递正确的参数名和值。
xslt.Transform(inputDataXML.CreateReader(), /*XSLTArgumentList*/, outputWriter, null);
<xsl:param name="param1" />
<xsl:value-of select="$param1" />
XsltArgumentList args = new XsltArgumentList();
args.Add("param1", null, "DataToPass");