xsl y xml, usar 1 xml y varios xsl

Preguntado hace 1 año

Fernandoflorido
Votos
PositivosNegativosTotal
1 0 1
31 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Tengo un fichero 1.xsl que da formato a un fichero 1.xml Tengo otro fichero 2.xsl que da formato a otro fichero 2.xml

La pregunta es: si quiero que todos los datos xml esten en un fichero comun 1y2.xml, cuando el usuario elija la opcion 1 o la 2, como hago para presentarla de la manera 1.xsl o de la manera 2.xsl

Problema: Que los ficheros xml en general, ya tienen vinculados un .xsl concreto en la cabecera, en el ejemplo puesto bien el 1.xsl o bien el 2.xsl

Actualizando datos

1 Respuesta

Hace 1 año

Guillermo Barrios
Editada hace 1 año
Votos
PositivosNegativosTotal
101

Hola, Roben,

no indicas que lenguaje de servidor usas, lo que yo haría en asp.net (tendrás equivalencias para otros lenguajes) sería no escribir en el xml las primeras líneas

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="1.xsl"?> 

Y dejar en xml sólo los datos xml.

En el servidor sabes si lo quieres presentar con el xsl1 o con el xsl2 según lo que indique el usuario.

En asp.net tienes los IHTTPHandler. Yo me crearía uno, cuando pidan con el xsl1 creas la cadena xml que quieres devolver, en la que concatenas estas primeras líneas y luego lees el fichero xml, lo juntas y lo devuelves. Para el 2 lo mismo.

<%@ WebHandler Language="C#" Class="ControladorXML" %>

using System;
using System.Web;

using System.Text;
using System.IO;

public class ControladorXML : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/xml";

        StringBuilder constructor = new StringBuilder();

        String rutaFicheroXML = "xml/fichero.xml";

        constructor.Append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
        constructor.AppendLine("<?xml-stylesheet type=\"text/xsl\" href=\"1.xsl\"?>");

        constructor.Append(File.ReadAllText(rutaFicheroXML));

        context.Response.Write(constructor.ToString());

    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

Ya te digo que esto es en asp.net pero en php, java o el que sea tendrás un equivalente en el que hacerlo de una manera parecida.

Un saludo, Guille.

Cerrar

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres