【问题标题】:Pass parameter to XSLT stylesheet将参数传递给 XSLT 样式表
【发布时间】:2012-10-08 19:04:43
【问题描述】:

我正在尝试将几个参数传递给 XSLT 样式表。我已经按照示例:Passing parameters to XSLT Stylesheet via .NET

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

这是我的 C# 代码。我不得不添加一个自定义函数来执行一些算术,因为 Visual Studio 2010 不使用 XSLT 2.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"/>

我错过了什么吗?

【问题讨论】:

  • 您在顶层有&lt;xsl:param name="processingId"&gt; 吗?似乎您在将创建本地参数的模板中定义了参数。对于外部参数,参数必须是全局的,因此必须与 xsl:template elements 在同一级别定义
  • 我不确定你在顶层是什么意思。我在问题中粘贴的参数定义位于
  • 我的意思是它不应该在 xsl:template 中。试试这样的:&lt;xsl:stylesheet ...&gt; &lt;xsl:param name="processingId" /&gt;&lt;xsl:template match="/"&gt;&lt;xsl:value-of select="$processingId"/&gt;...

标签: c# xslt transformation


【解决方案1】:

这是我的 XSLT:

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

我错过了什么吗?

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

因此,代码必须是:

 <xsl:param name="processingId"/>     

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

【讨论】:

  • 这实际上是一个很方便的事情,有人知道这是否也可以使用Java来完成?
  • @adam5990,是的,如果使用的特定 XSLT 处理器是用 Java 编写的。以编程方式指定全局参数值的方式是特定于实现的,并且因 XSLT 处理器而异。例如,参见 Saxon 文档的这一部分:saxonica.com/documentation/#!using-xsl/embedding/...。特别是它说(在第 1 点下):“您可以使用 XsltTransformer 上的方法来设置全局样式表参数的值”但是请注意,手动执行此操作要容易得多,从命令调用 XSLT 转换 -行。
猜你喜欢
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 2021-07-28
  • 2019-05-17
相关资源
最近更新 更多