Как я могу использовать упакованную (экспортированную) таблицу стилей с saxon 9.7+ s9api? - PullRequest
0 голосов
/ 24 марта 2020

Начиная с Saxon 9.7, мы должны использовать другую процедуру s9api для «импорта» упакованной таблицы стилей. Здесь , Майкл говорит: «Пакеты таблиц стилей можно ... импортировать ... используя ... API-интерфейс s9api". Затем он сослался на эти подробности.

Пока я читал это, надеясь, что это будет просто, я остановился на этом:

Файл экспорта таблицы стилей ... принимается любым интерфейсом Saxon, который принимает исходную таблицу стилей.

Итак, я создал этот пример MCV:

import java.io.*;
import net.sf.saxon.Configuration;
import net.sf.saxon.s9api.Processor;
import net.sf.saxon.s9api.XsltCompiler;
import net.sf.saxon.s9api.XsltExecutable;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
public class test {
    public static void main (String args[]) throws Exception {
        Processor saxProc = new Processor(false);
        Configuration saxCfg = saxProc.getUnderlyingConfiguration();
        XsltCompiler saxComp = saxProc.newXsltCompiler();
        File xslmain = new File(args[0]);
        Source xsl = new StreamSource(xslmain);
        XsltExecutable saxExe = saxComp.compile(xsl);
    }
}

Выполнено так (с использованием 9.9.1.7J для ee, pe и he) не генерируется никаких исключений:

$ javac -classpath saxon9pe.jar test.java
$ java -classpath .:saxon9he.jar test something.xsl

Но если я упаковываю что-то. xsl (т. е. использую EE для экспорта в файл xml) и выполняю MCV следующим образом это, тогда исключение выдается:

$ java -classpath .:saxon9he.jar test something-exported.xml
Error
  SXPK0002: Cannot load expression with tag indexedFilter2. The stylesheet uses Saxon-EE features
Exception in thread "main" net.sf.saxon.s9api.SaxonApiException: Cannot load expression with tag indexedFilter2. The stylesheet uses Saxon-EE features

Разве я не могу быть в состоянии упаковать файл xsl, используя EE, распределить HE, и прочитать упакованную таблицу стилей, используя HE для выполнения преобразований? Если да, то как?

1 Ответ

1 голос
/ 25 марта 2020

Попробуйте скомпилировать его с -target:HE. В принципе это должно остановить генерацию конструкций Saxon-EE, которые не распознает среда выполнения HE.

Я должен сказать, что это не очень тщательно протестировано. Также может потребоваться отключить выбранные оптимизации с помощью параметра -opt.

...