我在使用Saxon 9.3设置参数时遇到问题。我有基本的变换函数撒克逊XSLT传递参数
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 [] VAL具有相等的长度与参数名称和相应的值的阵列。例如:name [0]是“version”,val [0]是“1.0”,name [1]是“filename”,val [1]是“test.xml”
我基于这个函数关闭样本代码在文档中给出,并且它对我的各种xslt转换正确运行,除非我有参数传递给xslt。转换将发生,如果参数未设置。
从调试中,我知道程序确实为我的名字数组中的每个值运行SetParameter。我在每个xslt文档中都有一个xsl:param,当使用命令行工具Transform.exe时,输入参数并获得正确的转换。
我想如何传递参数有什么问题吗?
感谢您的回复,并建议更小的帮助我测试我的功能。我创建了一个专门用于运行此功能的单独程序,并找出它的工作原理,这意味着在向函数输入参数时必须存在一些模糊的一致性错误。如果我有其他问题,我会跟进撒克逊人的帮助。 –