【发布时间】:2011-12-10 09:52:08
【问题描述】:
我在使用 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] 为“版本”,val[0] 为“1.0”,name[1] 为“文件名”,val[1] 为“test.xml”
我将此函数基于文档中给出的示例代码,并且它可以正确地用于我的各种 xslt 转换,除非我有参数要传递给 xslt。转换将发生,就好像没有设置参数一样。
通过调试,我知道程序确实为我的 name 数组中的每个值运行 SetParameter。我的每个 xslt 文档中都定义了 xsl:param,当使用命令行工具 Transform.exe 时,输入参数并得到正确的转换。
我尝试传递参数的方式有问题吗?
【问题讨论】:
标签: c# parameters xslt saxon