C# 将参数传递给XSLT样式表

C# 将参数传递给XSLT样式表,c#,xslt,transformation,C#,Xslt,Transformation,我试图将几个参数传递给XSLT样式表。我遵循了以下示例: 但是我的转换页面没有正确显示值 这是我的密码。我不得不添加一个自定义函数来执行一些运算,因为VisualStudio2010不使用XSLT2.0 var args = new XsltArgumentList(); args.AddExtensionObject("urn:XslFunctionExtensions", new XslFunctionExtensions()); args.AddParam("processin

我试图将几个参数传递给XSLT样式表。我遵循了以下示例:

但是我的转换页面没有正确显示值

这是我的密码。我不得不添加一个自定义函数来执行一些运算,因为VisualStudio2010不使用XSLT2.0

  var args = new XsltArgumentList();
  args.AddExtensionObject("urn:XslFunctionExtensions", new XslFunctionExtensions());
  args.AddParam("processingId", string.Empty, processingId);

  var myXPathDoc = new XPathDocument(claimDataStream);
  var xslCompiledTransformation = new XslCompiledTransform(true);

  // XSLT File
  xslCompiledTransformation.Load(xmlReader);

  // HTML File
  using (var xmlTextWriter = new XmlTextWriter(outputFile, null))
  {
      xslCompiledTransformation.Transform(myXPathDoc, args, xmlTextWriter);
  }
这是我的XSLT:

    <xsl:template match="/">
    <xsl:param name="processingId"></xsl:param>
    ..HTML..
    <xsl:value-of select="$processingId"/>
<xsl:template match="/">     
  <xsl:param name="processingId"></xsl:param>     
  ..HTML..     
  <xsl:value-of select="$processingId"/> 

…HTML。。
我错过什么了吗

这是我的XSLT:

    <xsl:template match="/">
    <xsl:param name="processingId"></xsl:param>
    ..HTML..
    <xsl:value-of select="$processingId"/>
<xsl:template match="/">     
  <xsl:param name="processingId"></xsl:param>     
  ..HTML..     
  <xsl:value-of select="$processingId"/> 

…HTML。。
我错过什么了吗

是的,您忽略了这样一个事实:XSLT转换的调用者可以设置全局级参数的值,而不是模板级参数的值

因此,代码必须是:

 <xsl:param name="processingId"/>     

 <xsl:template match="/">     
   ..HTML..     
   <xsl:value-of select="$processingId"/> 
   <!-- Possibly other processing here  -->
 </xsl:template>

…HTML。。

您是否有顶级的
?似乎您在一个模板中定义了参数,该模板将创建一个本地参数。对于外部参数,该参数必须是全局的,因此必须在与xsl:template元素相同的级别上定义。我不确定您在顶层的意思。参数定义在我在问题中粘贴时的下方。上面是标记,我的意思是它不应该在xsl:template中。试着这样做:
这实际上是一件非常方便的事情,有人知道这是否也可以使用Java来完成吗?@adam5990,是的,以防使用的特定XSLT处理器是用Java编写的。以编程方式指定全局参数值的方法是特定于实现的,并且因XSLT处理器而异。例如,请参见Saxon文档的本节:saxonica.com/documentation/#!使用xsl/embedding/。特别是它说(在第1点下):“您可以使用XsltTransformer上的方法来设置全局样式表参数的值”,但请注意,手动执行此操作要容易得多,可以从命令行调用XSLT转换。