У меня проблемы с настройкой параметров с помощью 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. Преобразование будет происходить так, как если бы параметры не были установлены.
Из отладки я знаю, что программа запускает SetParameter для каждого значения в моем массиве имен. У меня есть xsl: param, определенный в каждом из моих документов xslt, и при использовании инструмента командной строки Transform.exe параметры вводятся, и я получаю правильное преобразование.
Что-то не так с тем, как я пытаюсь передать параметры?