Saxon XSLT传递参数

时间:2011-10-18 20:05:03

标签: 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));
    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();
}

其中String [] name和String [] val是具有参数名称和相应值的相等长度的数组。示例:name [0]为“version”,val [0]为“1.0”,name [1]为“filename”,val [1]为“test.xml”

我将此函数基于文档中给出的示例代码,并且它正确地用于我的各种xslt转换,除非我有参数传递给xslt。将进行转换,就好像未设置参数一样。

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

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

1 个答案:

答案 0 :(得分:2)

如果它从命令行运行,我看不出任何明显的原因,它不应该使用此代码。一个区别是命令行将params作为untypedAtomic传递,而你将它们作为字符串传递 - 如果版本期望一个数字,这可能会有所不同。

我建议跟进saxon-help列表(正确跟踪消息 - 当你在这里询问时,我们是否碰巧看到消息的可能性很小),使用一个可重复的小样本提供所有需要的信息 - 一个完整的C#程序和简单的样式表。