Saxon XSLT, передавая параметры - PullRequest
2 голосов
/ 19 октября 2011

У меня проблемы с настройкой параметров с помощью 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 параметры вводятся, и я получаю правильное преобразование.

Что-то не так с тем, как я пытаюсь передать параметры?

1 Ответ

2 голосов
/ 19 октября 2011

Если это работает из командной строки, я не вижу никакой очевидной причины, почему он не должен работать с этим кодом. Одно из отличий заключается в том, что командная строка передает параметры как нетипизированные, тогда как вы передаете их как строки - что может иметь значение, если версия ожидает число.

Я бы посоветовал следить за списком помощи саксонам (где сообщения правильно отслеживаются - когда вы спрашиваете здесь, это просто шанс, если мы увидим сообщение) с небольшим воспроизводимым образцом, дающим всю необходимую информацию - полный C # программа и простая таблица стилей.

...