используя файлы XML и XSL от Saxon - PullRequest
0 голосов
/ 12 января 2019

Простота Xalan довольно привлекательна, но Как мне выполнить это простое преобразование из saxon с использованием xml и xsl файлов?

package xalan;

import java.io.File;
import java.io.FileOutputStream;
import java.net.URI;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XalanTransform {

    public XalanTransform() {
    }

    public void transform(URI xml, URI xsl, URI out) throws Exception {
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer(new StreamSource(new File(xsl)));
        transformer.transform(new StreamSource(new File(xml)), new StreamResult(new FileOutputStream(new File(out))));
    }

}

Это буквально не может быть проще, и я ценю возможность работать с файлами. Я проделал некоторые аналогичные операции с saxon из CLI, но, возможно, пропускаю аналогичную документацию для saxon с Java, как указано выше, где файлы загружаются во время выполнения.

1 Ответ

0 голосов
/ 12 января 2019

API, который вы используете - JAXP, и он поддерживается как Saxon, так и Xalan: вам просто нужно убедиться, что реализация TransformerFactory в Saxon находится на пути к классам.

Это правда, что этот API прост, но для некоторых целей он слишком прост. Например:

  • Он не поддерживает функции XSLT 2.0 и 3.0, такие как распознавание схем, потоковая передача, несколько выходных документов

  • Не позволяет указывать параметры с полным диапазоном типов данных

  • Он не предоставляет никакого способа предоставления одного и того же документа в качестве входных данных для нескольких преобразований (вы можете попробовать предоставить его как DOM, но это очень плохо подходит для XSLT, и это даже не поточно-ориентированный)

По этим причинам Saxon также предоставляет собственный API под названием s9api. Это немного сложнее для выполнения очень простых вещей, но гораздо более всеобъемлющим и мощным.

...