2010-04-28 29 views
8

Me gustaría fusionar 2 cadenas XML (cadenas) en Java, necesariamente por XSLT (que podría cambiar la transformación), pero el problema es que los XML vienen como una cuerda. Hay muchos ejemplos, pero a través de los archivos. ¿Se puede hacer esto sin guardarlos en archivos?Cómo fusionar 2 secuencias XML en Java mediante XSLT

Gracias.

Respuesta

5

Yo sólo sé de una manera usando una aplicación propia de 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; 
    } 
} 

utilizar de esta manera:

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

Y en la transformación, hacer referencia a ella como esto:

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

Sí !!! ¡¡¡Funciona!!! ¡¡¡Muchas gracias!!! :)) – user327933

+0

+1 Puño uso de esto que he visto. Lo he adaptado para usar

0

Eche un vistazo a this tutorial, tiene todo lo que necesita (con ejemplos).

Si desea transformar XML que viene en formato de cadena, utilice algo como:

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

Esto responde a cómo obtener el documento de entrada de una cadena. Pero la pregunta es acerca de cómo fusionar dos documentos. Uno de los documentos debe ser leído por la transformación en sí (como en el tercer ejemplo del tutorial), o dado como parámetro. –