XSLT-Verarbeitung mit Java?


75

Wie transformiere ich XML mit dem XSLT-Prozessor in Java mithilfe des JDK?


Gute Frage, +1. In meiner Antwort finden Sie Hinweise auf die Dokumentation von Saxon und einen wichtigen Hinweis, dass Java in vielen Fällen nicht erforderlich ist, um einen Java-basierten XSLT-Prozessor zu verwenden.
Dimitre Novatchev

7
Diese Antwort hat eine genaue Antwort, und es ist für einen Neuling nicht sehr offensichtlich, wie die Antwort lautet. Diese Frage sollte erneut geöffnet werden.
Raedwald

Zum Thema, da ... Sie wissen, dass die Verwendung von Programmierwerkzeugen in einer Programmiersprache hier kein Thema ist ... smh.
Rogerdpack

Antworten:


151

Hier ist ein Beispiel für die Verwendung von Java API für Transformatoren, wie @Raedwald sagte:

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")));
    }
}

Der Eingang kann auch aus einer Schnur oder DOMSource sein, kann der Ausgang sein , um einen DOMSource etc .


1
Was für ein gut geschriebenes Beispiel! Ich danke dir sehr!
crazyim5

9

Ich bin neu bei xslt. Kann mir jemand zeigen, wie man mit Java xslt verarbeitet?

Dies hängt davon ab, welchen Java-basierten XSLT-Prozessor Sie verwenden. Jeder XSLT-Prozessor verfügt über eine eigene API.

Beispielsweise sind Saxon 6.5.5 (für XSLT 1.0) und Saxon 9.1.07 (für XSLT 2.0) in Java geschrieben. Die Dokumentation finden Sie unter http://www.saxonica.com/documentation/documentation.xml

Fast alle XSLT-Prozessoren verfügen über ein Befehlszeilenprogramm , für das kein Programm geschrieben werden muss, um eine XSLT-Umwandlung durchzuführen.

Hier ist zum Beispiel : So starten Sie eine Saxon 9.x-Transformation über die Befehlszeile .

So benutze ich Saxon immer über die Kommandozeile :

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\"]%

Wo %out%ist der Name der Ausgabedatei, %xml%ist die XML-Datei, %xsl%ist die primäre xslt-Datei und %param[ name=\"value\"]%ist eine Name-Wert-Liste der externen Parameter (ich lasse diese fast immer leer).


8
Es gibt eine Standard-API für XSLT, siehe Paket javax.xml.transform. Ich würde dies zugunsten einer Drittanbieter-Bibliothek mit eigener API verwenden, es sei denn, es gibt einen zwingenden Grund für die Verwendung einer bestimmten Drittanbieter-Bibliothek.
Jesper

1
@Jesper: Wir haben das Glück, dass die Verwendung von APIs nicht der einzige Weg ist! Die Mehrheit der XSLT-Programmierer, die einen XSLT-Prozessor verwenden, sind keine Java-Programmierer. Es wäre ein völlig unglücklicher und ungerechtfertigter Verlust, wenn ihnen die Verwendung so großartiger XSLT-Prozessoren wie Saxon oder Xalan vorenthalten würde. Tatsächlich wäre die Herstellung von Java-basierten XSLT-Prozessoren, für deren Verwendung Java-Programmierung erforderlich war, überhaupt nicht rentabel.
Dimitre Novatchev

5
@Dimitre Aber die Frage war, wie man XSLT-Verarbeitung mit Java macht; Es ist nicht relevant, über andere Möglichkeiten zu sprechen (nicht über eine API). Wenn Sie eine API verwenden möchten, verwenden Sie die Standard-API, es sei denn, es gibt einen zwingenden Grund, eine nicht standardmäßige API zu verwenden.
Jesper

1
@Jesper: Die Art und Weise, einen XSLT-Prozessor ohne Programmierung zu verwenden, nicht bekannt zu machen, wäre ein schlechter Dienst für das OP und jeden anderen Leser und würde sie irreführen, zu glauben, dass das Schreiben eines Programms der einzige Weg ist, dies zu tun. Meine Antwort ist eine klare Botschaft: Es gibt einen besseren und bequemeren Weg; Schreiben Sie ein Programm nur, wenn Sie müssen .
Dimitre Novatchev

8

Die Java-Standardbibliothek bietet eine (XSLT) -Transformationsschnittstelle für die XML-Analyse. Siehe die API-Dokumentation für die Klassen javax.xml.transform.Transformerund javax.xml.transform.TransformerFactory.


3
Es wäre großartig, wenn Sie einen Link zu den Java 6-Javadocs für die relevanten Klassen und ein einfaches Codebeispiel bereitstellen könnten.
Ophidian

5

JAXP bietet eine implementierungsunabhängige Möglichkeit, mit XSLT-Transformationen zu arbeiten. Hier ist das Tutorial , um Ihnen den Einstieg zu erleichtern. Wenn Sie mit großen XSLTs und / oder mit mehreren XSLTs arbeiten, besteht aus Leistungsgründen auch die Möglichkeit, die analysierten XSLT-Vorlagen zwischenzuspeichern. Dieser Artikel erklärt, wie man xslt's zwischenspeichert

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.