Обробка XSLT за допомогою Java? [зачинено]


76

Як перетворити XML за допомогою процесора XSLT в Java за допомогою JDK?


1
Гарне запитання, +1. Дивіться мою відповідь на вказівки на документацію Саксонії та важливе повідомлення, що у багатьох випадках не потрібно знати Java, щоб використовувати процесор XSLT на основі Java.
Dimitre Novatchev

7
Ця відповідь має точну відповідь, і новачкові не дуже очевидно, якою є відповідь. Це питання слід відкрити знову.
Raedwald

Щодо теми, оскільки ... ти знаєш, використання інструментів програміста мовою програміста тут не в темі ... smh.
rogerdpack

Відповіді:


153

Ось зразок використання Java api для трансформатора, як сказав @Raedwald:

import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

public class TestMain {
    public static void main(String[] args) throws IOException, URISyntaxException, TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        Source xslt = new StreamSource(new File("transform.xslt"));
        Transformer transformer = factory.newTransformer(xslt);

        Source text = new StreamSource(new File("input.xml"));
        transformer.transform(text, new StreamResult(new File("output.xml")));
    }
}

Вхід також може бути з рядка або DOMSource, вихід може бути в DOMSource тощо .


1
Який добре написаний приклад !! Дуже дякую!
crazyim5

9

Я новачок у xslt. Хто-небудь може мене направити, як обробити xslt за допомогою Java?

Це залежить від того, який процесор XSLT на базі Java ви використовуєте. Кожен процесор XSLT має власний API.

Наприклад, Saxon 6.5.5 (для XSLT 1.0) та Saxon 9.1.07 (для XSLT 2.0) написані на Java. Документація знаходиться на веб- сайті http://www.saxonica.com/documentation/documentation.xml

Майже всі процесори XSLT мають утиліту командного рядка , яка не вимагає написання програми для виконання перетворення XSLT.

Наприклад, ось : як розпочати перетворення Saxon 9.x із командного рядка .

Ось як я завжди використовую саксонську мову з командного рядка :

java -Xms2048M  -Xmx10000M  -jar  
     C:\xml\Parsers\Saxon\Ver.9.1.0.7\J\saxon9.jar 
    -t  -repeat:1  -o %out%  %xml%  %xsl%  %param[ name=\"value\"]%

де %out%- ім'я вихідного файлу, %xml%- файл xml, %xsl%це основний файл xslt і %param[ name=\"value\"]%список імен - значення зовнішніх параметрів (я майже завжди залишаю це порожнім).


8
Існує стандартний API для XSLT, див. Пакет javax.xml.transform. Я б використав це на користь будь-якої сторонньої бібліотеки зі своїм власним API, за винятком випадків, коли існує якась вагома причина для використання конкретної сторонньої бібліотеки.
Jesper

1
@Jesper: Нам пощастило, що використання API - це не єдиний спосіб! Більшість програмістів XSLT, які використовують будь-який процесор XSLT, не є програмістами Java. Було б абсолютно нещасною і невиправданою втратою, якби їх позбавили використання таких чудових процесорів XSLT, як Saxon або Xalan. Насправді, виробництво процесорів XSLT на базі Java, які потребували програмування на Java для того, щоб їх використовувати, було б зовсім не вигідно.
Dimitre Novatchev

5
@Dimitre Але питання полягало в тому, як зробити обробку XSLT за допомогою Java; говорити про інші способи зробити це (не через API) не є актуальним. Якщо ви збираєтеся робити це за допомогою якогось API, використовуйте стандартний API, якщо немає вагомих причин використовувати якийсь нестандартний API.
Jesper

1
@Jesper: Не повідомляти про спосіб використання процесора XSLT без будь-якого програмування було б поганою послугою для ОП та будь-якого іншого читача і вводило б їх в оману, вважаючи, що написання програми - це єдиний спосіб зробити це. Моя відповідь - чітке повідомлення: є кращий та зручніший спосіб; напишіть програму, лише якщо вам потрібно .
Dimitre Novatchev

8

Стандартна бібліотека Java забезпечує інтерфейс перетворення (XSLT) для аналізу XML. Див. Документацію до API для класів javax.xml.transform.Transformerта javax.xml.transform.TransformerFactory.


3
Було б чудово, якби ви могли надати посилання на javadocs Java 6 для відповідних класів та простий приклад коду.
Офідіан

5

JAXP забезпечує незалежний від реалізації спосіб роботи з перетвореннями XSLT. Ось підручник для початку роботи. Якщо ви працюєте з величезними XSLT та / або працюєте з декількома XSLT, тоді також існує можливість кешування проаналізованих шаблонів XSLT з міркувань продуктивності. У цій статті пояснюється, як кешувати xslt

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.