Сборка приложения .NET VSTO с использованием Saxon-HE 9.9.1.5. Установка глобальных параметров таблицы стилей для преобразователя XSLT 3.0 не работает. Я передаю словарь QName / XdmAtomicValue безрезультатно.
Тот же XSLT отлично работает, используя Saxon-HE 9.8.0-10 в Java 8.
private Dictionary<QName, XdmValue> createParameters(IDictionary<string, string> properties)
{
Dictionary<QName, XdmValue> retVal = new Dictionary<QName, XdmValue>(properties.Count);
foreach (var kvp in properties)
{
LOGGER.Debug(String.Format("\tName: \"{0}\"; Value: \"{1}\"", kvp.Key, kvp.Value));
retVal.Add(new QName(kvp.Key), new XdmAtomicValue(kvp.Value) );
}
return retVal;
}
public void Transform(FileInfo xmlInput, FileInfo output, IDictionary<string,string> properties )
{
try
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
Xslt30Transformer transformer = Executable.Load30();
Serializer serializer = processor.NewSerializer();
FileStream outStream = new FileStream(output.FullName.ToString(), FileMode.Append, FileAccess.Write);
serializer.SetOutputStream(outStream);
FileStream inputStream = new FileStream(xmlInput.FullName.ToString(), FileMode.Open, FileAccess.Read);
Dictionary<QName, XdmValue> parameters = createParameters(properties);
LOGGER.Debug(String.Format("\nInput: \"{0}\"\nOutput: \"{1}\"\nParameters: {2}", xmlInput.FullName, output.FullName, parameters.Count));
transformer.SetStylesheetParameters(parameters);
transformer.ApplyTemplates(inputStream, serializer);
outStream.Flush();
outStream.Close();
inputStream.Close();
stopwatch.Stop();
LOGGER.Debug(String.Format("Generate model call took: {0}", stopwatch.ElapsedMilliseconds));
}
catch ( Exception e)
{
LOGGER.Warn(String.Format("{0} {1}", e.Message, e.StackTrace));
}
}
}
Глобальные значения по умолчанию XSLTиспользуется вместо переданных параметров