C# Saxon-XSLT传递参数

C# Saxon-XSLT传递参数,c#,parameters,xslt,saxon,C#,Parameters,Xslt,Saxon,我在使用Saxon 9.3设置参数时遇到问题。我有我的基本转换函数 private void runXSLT(String inFile, String xslt, String outFile, String[] name, String[] val) { Processor proc = new Processor(); XdmNode input = proc.NewDocumentBuilder().Build(new Uri(inFile)); XsltTran

我在使用Saxon 9.3设置参数时遇到问题。我有我的基本转换函数

private void runXSLT(String inFile, String xslt, String outFile, String[] name, String[] val)
{
    Processor proc = new Processor();
    XdmNode input = proc.NewDocumentBuilder().Build(new Uri(inFile));
    XsltTransformer transformer = proc.NewXsltCompiler().Compile(new Uri(xslt)).Load();
    transformer.InitialContextNode = input;
    if (name != null)
      for (int i = 0; i < name.Length; i++)
        transformer.SetParameter(new QName("", "", name[i]), new XdmAtomicValue(val[i]));
    Serializer serializer = new Serializer();
    FileStream outStream = new FileStream(outFile, FileMode.Create, FileAccess.Write);
    serializer.SetOutputStream(outStream);
    transformer.Run(serializer);
    outStream.Close();
}
private void runXSLT(字符串填充、字符串xslt、字符串输出文件、字符串[]名称、字符串[]val)
{
处理器进程=新处理器();
XdmNode input=proc.NewDocumentBuilder().Build(新Uri(infle));
XsltTransformer transformer=proc.NewXsltCompiler().Compile(新Uri(xslt)).Load();
transformer.InitialContextNode=输入;
if(name!=null)
for(int i=0;i
其中字符串[]name和字符串[]val是长度相等的数组,具有参数名称和相应的值。示例:名称[0]为“版本”,val[0]为“1.0”,名称[1]为“文件名”,val[1]为“test.xml”

我根据文档中给出的示例代码创建了这个函数,它可以正确地用于各种xslt转换,除非我有参数要传递给xslt。转换将像未设置参数一样进行

通过调试,我知道程序确实为我的名称数组中的每个值运行SetParameter。我在每个xslt文档中都定义了xsl:param,并且在使用命令行工具Transform.exe时,输入参数并获得正确的转换


我试图传递参数的方式有什么问题吗?

如果它是从命令行运行的,我看不出任何明显的原因为什么它不能与此代码一起工作。一个区别是命令行以非类型数据组的形式传递参数,而您是以字符串的形式传递参数——如果版本需要一个数字,这可能会有所不同


我建议在saxon帮助列表(信息被正确跟踪的地方——当你在这里询问时,我们是否碰巧看到了信息,这纯粹是一个机会)上使用一个小的可复制样本,提供所有需要的信息——一个完整的C#程序,和一个简单的样式表。

感谢您的回复和缩小尺寸的建议,帮助我测试了我的功能。我专门创建了一个单独的程序来运行这个函数,并发现它确实有效,这意味着在我如何将参数输入到函数中时,一定存在一些模糊的一致性错误。如果我有其他问题,我会继续与撒克逊的帮助。