2010-04-28 20 views
8

Vorrei unire 2 flussi XML (stringhe) in Java, necessariamente da XSLT (che potrei cambiare la trasformazione), ma il problema è che gli XML arrivano come stringa. Ci sono molti esempi, ma attraverso i file. Questo può essere fatto senza salvarli nei file?Come unire 2 stream XML in Java tramite XSLT

Grazie.

risposta

5

So solo di un modo utilizzando una propria implementazione di URIResolver.

public final class StringURIResolver implements URIResolver { 
    Map<String, String> documents = new HashMap<String, String>(); 

    public StringURIResolver put(final String href, final String document) { 
     documents.put(href, document); 
     return this; 
    } 

    public Source resolve(final String href, final String base) 
    throws TransformerException { 
     final String s = documents.get(href); 
     if (s != null) { 
      return new StreamSource(new StringReader(s)); 
     } 
     return null; 
    } 
} 

usare in questo modo:

final String document1 = ... 
final String document2 = ... 
final Templates template = ... 
final Transformer transformer = template.newTransformer(); 
transformer.setURIResolver(new StringURIResolver().put("document2", document2)); 
final StringWriter out = new StringWriter(); 
transformer.transform(new StreamSource(new StringReader(document1)), 
    new StreamResult(out)); 

E nel trasformare, fare riferimento in questo modo:

<xsl:variable name="document2" select="document('document2')" /> 
+0

Sì !!! Funziona!!! Grazie mille!!! :)) – user327933

+0

+1 Uso pugno di questo che ho visto. L'ho adattato per usare

0

Dai un'occhiata allo this tutorial, ha tutto ciò che ti serve (con esempi).

Se si desidera trasformare XML che viene fornito in formato stringa, usare qualcosa come:

Templates template = ...; 
String xml = ...; 
Transformer transformer = template.newTransformer(); 
Writer out = new StringWriter(); 
transformer.transform(new StreamSource(new StringReader(xml)), new StreamResult(out)); 
+2

Questo non risponde come ottenere il documento di input da una stringa. Ma la domanda è su come unire due documenti. Uno dei documenti deve essere letto dalla trasformazione stessa (come nel terzo esempio del tutorial) o dato come parametro. –