2011-01-05 14 views
59

Come trasformare XML con il processore XSLT in Java?Elaborazione XSLT con Java?

+0

Buona domanda, +1. Vedere la mia risposta per i riferimenti alla documentazione di Saxon e per un importante avviso che in molti casi non è necessario conoscere Java per utilizzare un processore XSLT basato su Java. –

+0

[jcabi-xml] (http://xml.jcabi.com) può aiutare: http://www.yegor256.com/2015/02/02/xsl-transformations-in-java.html – yegor256

+3

Questa risposta ha un risposta precisa, e non è molto ovvio per un nuovo arrivato quale sia la risposta. Questa domanda dovrebbe essere riaperta. – Raedwald

risposta

8

La libreria standard Java fornisce un'interfaccia di trasformazione (XSLT) per l'analisi XML. Consultare la documentazione API per le classi javax.xml.transform.Transformer e javax.xml.transform.TransformerFactory.

+3

Sarebbe bello se fosse possibile fornire un collegamento ai javadoc Java 6 per le classi pertinenti e un semplice esempio di codice. – Ophidian

7

Sono nuovo di xslt. Qualcuno mi può guidare come elaborare xslt con java?

Questo dipende dal processore XSLT basato su Java che si sta utilizzando. Ogni processore XSLT ha la sua API.

Ad esempio, Saxon 6.5.5 (per XSLT 1.0) e Saxon 9.1.07 (per XSLT 2.0) sono scritti in Java. La documentazione è a http://www.saxonica.com/documentation/documentation.xml

Quasi tutti i processori XSLT hanno una riga di comando, che non richiede scrivere un programma per eseguire una trasformazione XSLT.

Ad esempio, here is: come avviare una trasformazione 9.x sassone dalla riga di comando.

ecco come lo uso sempre Saxon dalla riga di comando:

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

dove %out% è il nome del file di output, %xml% è il file xml, %xsl% è il file XSLT primario e %param[ name=\"value\"]% è un elenco di valori nominali di parametri esterni (quasi sempre lo lascia vuoto).

+7

C'è un'API standard per XSLT, vedere il pacchetto 'javax.xml.transform'. Lo userei a favore di qualsiasi libreria di terze parti con la propria API, a meno che non vi siano motivi validi per l'utilizzo di una specifica libreria di terze parti. – Jesper

+1

@Jesper: Siamo * fortunati * che l'utilizzo delle API non sia l'unico modo! La maggior parte dei programmatori XSLT che utilizzano qualsiasi processore XSLT non sono * programmatori Java. Sarebbe una perdita totalmente spiacevole e ingiustificata se fossero stati privati ​​di utilizzare processori XSLT come Saxon o Xalan.In effetti, la produzione di processori XSLT basati su Java che richiedevano la programmazione Java per poterli utilizzare, non sarebbe affatto vantaggiosa. –

+2

@Dimitre Ma la domanda era su come eseguire l'elaborazione XSLT con Java; parlare di altri modi per farlo (non tramite un'API) non è rilevante. Se hai intenzione di farlo utilizzando alcune API, usa l'API standard a meno che non vi sia un valido motivo per utilizzare alcune API non standard. – Jesper

5

JAXP fornisce un modo indipendente di implementazione con le trasformazioni XSLT. Here is the tutorial per iniziare. Se stai lavorando con XSLT e/o lavorando con XSLT multipli, esiste anche un'opzione di memorizzazione nella cache dei modelli XSLT analizzati per motivi di prestazioni. This article spiega come memorizzare nella cache

117

Qui è campione di XSLT per l'utilizzo di API Java per il trasformatore, come ha detto @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"))); 
    } 
} 
+0

salvatore di vita ... grazie mille !! –

+0

Che esempio ben scritto !! Grazie mille! – crazyim5