2011-01-05 15 views
59

Jak przekształcić XML za pomocą procesora XSLT w Javie?Przetwarzanie XSLT z Java?

+0

Dobre pytanie, +1. Zobacz moją odpowiedź na wskazówki do dokumentacji Saxona i ważne zawiadomienie, że w wielu przypadkach nie trzeba znać Javy, aby użyć procesora XSLT opartego na Javie. –

+0

[jcabi-xml] (http://xml.jcabi.com) może pomóc: http://www.yegor256.com/2015/02/02/xsl-transformations-in-java.html – yegor256

+3

Ta odpowiedź ma precyzyjna odpowiedź, a dla nowo przybyłego nie jest oczywiste, jaka jest odpowiedź. To pytanie powinno zostać ponownie otwarte. – Raedwald

Odpowiedz

8

Standardowa biblioteka Java udostępnia interfejs transformacji (XSLT) do analizowania XML. Zobacz dokumentację API dla klas javax.xml.transform.Transformer i javax.xml.transform.TransformerFactory.

+3

Byłoby świetnie, gdyby można było podać link do Java 6 javadocs dla odpowiednich klas i prosty przykład kodu. – Ophidian

7

Jestem nowy w Xslt. Czy ktoś może mi przewodnika jak przetwarzać xslt z java?

Zależy to od używanego procesora XSLT opartego na języku Java. Każdy procesor XSLT ma swój własny interfejs API.

Na przykład Saxon 6.5.5 (dla XSLT 1.0) i Saxon 9.1.07 (dla XSLT 2.0) są napisane w Javie. Dokumentacja jest w http://www.saxonica.com/documentation/documentation.xml

Niemal wszystkie procesory XSLT posiada narzędzia wiersza polecenia, która nie wymaga pisania programu w celu wykonania transformacji XSLT.

Na przykład here is: jak rozpocząć Saxon transformację 9.x z wiersza poleceń.

Oto jak zawsze używam Saxon z linii poleceń:

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

gdzie %out% to nazwa pliku wyjściowego, %xml% jest plik xml, %xsl% jest głównym pliku XSLT i %param[ name=\"value\"]% jest listą parametrów wartości zewnętrznych (prawie zawsze pozostawiam to puste).

+7

Istnieje standardowy interfejs API dla XSLT, zobacz pakiet 'javax.xml.transform'. Używałbym tego na rzecz dowolnej biblioteki stron trzecich z własnym API, chyba że istnieje jakiś nieodpowiedni powód do korzystania z konkretnej biblioteki strony trzeciej. – Jesper

+1

@Jesper: Jesteśmy * szczęśliwi *, że korzystanie z API nie jest jedynym sposobem! Większość programistów XSLT używających dowolnego procesora XSLT to * nie * programiści Java. Byłaby to całkowicie niefortunna i nieuzasadniona strata, gdyby pozbawiono ich tak wielkich procesorów XSLT, jak Saxon czy Xalan.W rzeczywistości tworzenie opartych na Javie procesorów XSLT, które wymagały programowania w języku Java w celu ich użycia, nie byłoby w ogóle opłacalne. –

+2

@Dimitre Ale pytanie dotyczyło przetwarzania XSLT w Javie; mówienie o innych sposobach (nie poprzez API) nie jest istotne. Jeśli masz zamiar zrobić to za pomocą jakiegoś interfejsu API, użyj standardowego interfejsu API, chyba że istnieje nieodparty powód do korzystania z niestandardowego interfejsu API. – Jesper

5

JAXP zapewnia niezależny od implementacji sposób pracy z transformacjami XSLT. Here is the tutorial, aby zacząć. Jeśli pracujesz z ogromnym XSLT i/lub pracujesz z wieloma XSLT, istnieje również opcja buforowania sparsowanych szablonów XSLT ze względu na wydajność. This article wyjaśnia jak buforować

117

Oto próbki XSLT za korzystanie Java API dla transformatora, jak @Raedwald powiedział:

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

Zbawiciel życia ... dziękuję bardzo !! –

+0

Co za dobrze napisany przykład !! Dziękuję bardzo! – crazyim5