Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problema con cabecera XML en Transformación XSLT - Ayuda

Estas en el tema de Problema con cabecera XML en Transformación XSLT - Ayuda en el foro de Programación General en Foros del Web. Buenos días, Tengo un problema que no conseguido resolver. Me genera esta linea de codigo xml.... " <?xml version="1.0" encoding="utf-8"?> " en la transformación xslt: ...
  #1 (permalink)  
Antiguo 15/06/2009, 01:44
 
Fecha de Ingreso: mayo-2009
Mensajes: 42
Antigüedad: 15 años
Puntos: 1
Problema con cabecera XML en Transformación XSLT - Ayuda

Buenos días,

Tengo un problema que no conseguido resolver.

Me genera esta linea de codigo xml.... " <?xml version="1.0" encoding="utf-8"?> " en la transformación xslt:


Etiqueta DOCTYPE

Etiqueta Html
Etiqueta Head y title
Etiqueta Body

<form name="form1" method="post" action="Default.aspx" id="form1">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTEzNDA3MDMyNjVkZNDKEs9hrjlBeJZ3h2QqkjT/ddSw" />

<!--Codigo generado de la transformación -->

<?xml version="1.0" encoding="utf-8"?>
<div id="contenedor"><div id="idiomas"><ul></ul></div><div id="central">...

Imagino que será por algo que he puesto en C# pero a saber el que, ya que soy un poco novato en esto de .Net.

Mi transformación XSLT a traves de C#, utilizo el XslTransform por no se muy bien en donde le digo que me pinte antes de la transformación la linea XML que puse arriba.

Codigo de la transformación:

protected void Page_Load(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(cargarXML());
//doc.Load(Server.MapPath("XMLFile.xml")) ;
XslTransform trans = new XslTransform();
trans.Load(Server.MapPath("Template_pestanyas.xsl" ));
//Xml xml1 = new Xml();
xml1.Document = doc;
xml1.Transform = trans;
}

No os puedo pegar el código tal cual porque debido a que no llevo 30 días con la cuenta creada no me deja pegar enlaces.


Si por lo que sea alguno puede ayudar lo agradecería.

Un saludo y gracias por todo.
  #2 (permalink)  
Antiguo 15/06/2009, 02:22
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola

El método por defecto de salida de las xsl, es xml, por lo tanto, si no especificas un output method diferente, genera la salida por defecto, la cual, al ser xml, debe iniciarse con la definición e identificación de un documento xml.

Si quieres que tu salida sea html, debes especificar el output method como html
por ejemplo, así:
Código:
<output method="html">
Puedes agregar otros parámetros que quieras o necesites, como tabulación, codificación o juego de caracteres, etc.

Felicidad
__________________
¡ hey, hou, hou, hey !
  #3 (permalink)  
Antiguo 15/06/2009, 02:30
 
Fecha de Ingreso: mayo-2009
Mensajes: 42
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Pero donde debo poner tal linea de código?

Lo siento pero estoy muy verde en esto.
  #4 (permalink)  
Antiguo 15/06/2009, 02:48
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola

No te preocupes, revisa esta página (en inglés). Su documentación es muy clara.

Para el caso que te ocupa ahora mismo, sería algo así:
Código:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
Felicidad
__________________
¡ hey, hou, hou, hey !
  #5 (permalink)  
Antiguo 15/06/2009, 03:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 42
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Mil gracias, por lo menos parece que ahora el código sale correctamente.

Peeeeeeeero nuevos portergates han ocurrido y no se a que son debido.

Cuando paso el validator W3C, no se sabe porque pero si en mi plantilla XSL donde pongo imagenes, ejemplo:

<img onclick="disminuye();" alt="Disminuir tamaño de letra" src="./imgfiles/img/a-.gif"/>
<img onkeypress="location.reload()" onclick="location.reload()" alt="Tamaño de letra normal" src="./imgfiles/img/a.gif" />
<img onclick="aumenta();" alt="Aumentar tamaño de letra" src="./imgfiles/img/ax.gif" />

A la hora de hacer la transformación para que lo muestre en el explorador y demás si voy al código fuente que me ha generado no se porque pero me quita las barras de cierre!! " / ". por lo que en cada etiqueta image no tiene la barra / y me lo pone como error...

Sabes a que es debido esta rareza? no entiendo pq si tengo las barras en la XSL porque luego me las quita...
  #6 (permalink)  
Antiguo 15/06/2009, 04:55
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola

Esta respuesta es totalmente especulatoria.

Posiblemente se deba, justamente, al tipo del output. En HTML, las etiquetas no tienen la barra al final.

Haz la prueba poniendo como tipo de output xml y revisa eso mismo; seguramente volverá a aparecer el encabezado de antes, pero sirve como prueba de concepto sobre el ouput.

Felicidad
__________________
¡ hey, hou, hou, hey !
  #7 (permalink)  
Antiguo 15/06/2009, 05:20
 
Fecha de Ingreso: mayo-2009
Mensajes: 42
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Ciertamente al cambiar el output a XML me lo resuelve todo poniendome solo 1 Error en el validator W3C.

Cuyo error es el de antes....

Line 17, Column 9: XML Parsing Error: XML declaration allowed only at the start of the document

<?xml version="1.0" encoding="utf-8"?>


VAYA INFIERNO!!
Me sale esa linea XML donde empiezan las <div> y claro, error al canto.

Que hago? :(
  #8 (permalink)  
Antiguo 15/06/2009, 06:47
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola

Viendo el otro tema que tienes abierto con el mismo problema, pero otro enfoque, te diría que cambies el doctype de xhtml a html 4.01.

Usa este:
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
No te preocupes sobre la calidad de la página ya que el html 4.01 es tan válido como el xhtml, mientras te preocupes de hacer bien las páginas, que parece que lo estás haciendo, todo funciona igual.

Luego vuelve a poner html como output del xslt.

Si no quieres cambiar el doctype, agrega esto al output:
Código:
omit-xml-declaration="yes"
Felicidad
__________________
¡ hey, hou, hou, hey !
  #9 (permalink)  
Antiguo 15/06/2009, 06:50
 
Fecha de Ingreso: mayo-2009
Mensajes: 42
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Pero de esta forma la pagina generada es XHTML? lo digo porque me han mandado que se genere una pagina XHTML y si con esto lo que hago es generarme una pagina html tengo un problema....
  #10 (permalink)  
Antiguo 15/06/2009, 09:26
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola

Obviamente no sabes muy bien la diferencia y quien te la pidió tampoco; eso o tienen unas necesidades muy poco comunes. Xhtml y html son, a efectos prácticos exáctamente lo mismo.

¿Necesitan unir el documento con delcraciones svg, rdfa o mathml?. Si es así, entonces si necesitan que sea xhtml, si no, es lo mismo.

Revisa las dos opciones que te di y verás que la opción dos debería dejarte un documento xhtml. La forma 1 genera un html.

Felicidad
__________________
¡ hey, hou, hou, hey !
  #11 (permalink)  
Antiguo 15/06/2009, 09:43
 
Fecha de Ingreso: mayo-2009
Mensajes: 42
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Te comento....

Con la opcion de generar un XHTML tal como me has dixo me siguen saliendo los errores de las "/" al final de la etiqueta <img> que no se pq me las desaparece cuando hace la transformacion.

Y con la segunda opcion que es generando el html me salen 9 errores muy raros tipo...

Attribute "XMLNS" is not a valid attribute. Did you mean "onmouseup" or "onmouseover"

Attribute "XML:LANG" is not a valid attribute

<html xmlns="http : // ww w. w3 . org / 1999 / xhtml" xml:lang="es" lang="es">

value of attribute "HTTP-EQUIV" must be a single token

<meta http-equiv =" Content - Type " content =" text / html ; charset =utf

value of attribute "HTTP-EQUIV" invalid: "-" cannot start a name

<meta http-equiv =" Content - Type " content =" text / html ; charset =utf

character data is not allowed here

… =" text / html ; charset =utf -8" />

end tag for element "HEAD" which is not open

document type does not allow element "BODY" here

value of attribute "ID" invalid: "_" cannot start a name

document type does not allow element "FORM" here

Es decir, errores sin sentido que no debería marcarmelos pq estan correctamente declarados, asi que no se... esto es un sin vivir de errores xD
  #12 (permalink)  
Antiguo 15/06/2009, 10:52
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola

No estás prestando atención, estás distraido o vas con mucha prisa ... aparte de cualquier otro problema que esté generando el xslt ...

Si generas un html, usa el doctype de html, no el de xhtml. Arriba te lo pegué.

Si tras usar el doctype de html + el output="html" te da problemas, pega el código html o la dirección a la página en internet para poderla ver.

De paso, pega el inicio de la xsl.

Felicidad
__________________
¡ hey, hou, hou, hey !
  #13 (permalink)  
Antiguo 16/06/2009, 01:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 42
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola,

A ver, parece que no me has entendido. He probado las 2 opciones que me has dado.
La primera poniendo el DOCTYPE:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
y en el xsl en el method poner :
<xsl:output method="html" encoding="utf-8" indent="yes"/>

De esta forma genero la pagina html pero al validarla con el W3C me salen los 9 ERRORES que te he puesto arriba.

La segunda opcion con el DOCTYPE:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http : // w w w .w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
y con el xsl method poner el mismo:
<xsl:output method="html" encoding="utf-8" indent="yes"/>
De esta forma salen los 36 errores de las "/" al final de las etiquetas q no te las coge y demas.
Dado que si le pongo el method="xml" me pasa lo de que te pone la linea de xml dentro del body y daria error.

Mi inicio de codigo en el documento XSL es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http : // w w w . w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<div id="contenedor">
.
.
.

Un saludo.
  #14 (permalink)  
Antiguo 16/06/2009, 05:26
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola

He estado haciendo unas pruebas y no entidndo los errores que mencionas.

Te pego los archivos que he usado para hacer las pruebas y el resultado que obtengo.

XML - prueba_01.xml
Código:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="prueba_01.xsl"?>
<elementos>
	<elemento>
		<nombre>nombre del primer elemento</nombre>
		<id>id del primer elemento</id>
	</elemento>
	<elemento>
		<nombre>nombre del segundo elemento</nombre>
		<id>id del segundo elemento</id>
	</elemento>
</elementos>
XSL - prueba_01.xsl
Código:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" indent="yes"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
	<head>
		<title>Ejemplo de uso de xml + xslt</title>
	</head>
	<body>
		<div><img src="/imagen.gif" alt="" /></div>
		<dl>
			<xsl:for-each select="elementos/elemento">
			<dt><xsl:value-of select="nombre"/></dt>
			<dd><xsl:value-of select="id"/></dd>
			</xsl:for-each>
		</dl>
	</body>
</html>
</xsl:template>
</xsl:stylesheet>
Resultado con method="xml"
Código:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>
<title>Ejemplo de uso de xml + xslt</title>
</head>
<body>
<div>
<img src="prueba_01_files/imagen.html" alt=""/>
</div>
<dl>
<dt>nombre del primer elemento</dt>
<dd>id del primer elemento</dd>
<dt>nombre del segundo elemento</dt>
<dd>id del segundo elemento</dd>
</dl>
</body>
</html>
Resultado con method="html"
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="es" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>Ejemplo de uso de xml + xslt</title>
</head>
<body>
<div>
<img alt="" src="prueba_01.xml_files/imagen.html">
</div>
<dl>
<dt>nombre del primer elemento</dt>
<dd>id del primer elemento</dd>
<dt>nombre del segundo elemento</dt>
<dd>id del segundo elemento</dd>
</dl>
</body>
</html>
Si cambio el omit-xml-declaration="no" a omit-xml-declaration="yes", no sale el <?xml version="1.0" encoding="UTF-8"?>.

Salvo una extraña transformación que hace a la imagen que pongo en el código, la cual no existe en mi disco, el resto está bien.

Usando esos códigos que pongo, revisa tu problema. Si aun persisten, haz modificaciones a esos códigos y pégalos para hacer las pruebas por mi lado y ver que pasa.

Felicidad
__________________
¡ hey, hou, hou, hey !
  #15 (permalink)  
Antiguo 16/06/2009, 06:19
 
Fecha de Ingreso: mayo-2009
Mensajes: 42
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Diosssssssssss al fin salió en verde el maldito validador!!!!!!!!!!!!!!!!!!!!!!!!

Juraría por todo lo que mas quiero que ayer ya probe el omit-xml-declaration="yes" pero a lo mejor se me pasó cambiar el method o a saber q narices, el caso es que ha funcionado al fin!!!!

Aun así te explico como es mi aplicación porque no es exactamente como la que has desarrollado tu.

Tu tienes un archivo XML físico, yo lo genero en memorystream dinámicamente en C# y luego se lo paso al Page_Load() para que haga la transformación xslt mediante el XslTransform.

En tu Xsl ya generas toda la web con sus etiquetas <html><head><title><body> etc. Yo en el xsl no puedo meter tales etiquetas porque ya están en el default.aspx, entonces... que he hecho? pues en el codigo html que ya viene asociado en el default.aspx pongo el Docype y en la head meto la etiqueta "meta" donde le especifico el utf - 8, el content - type y demás.
En la plantilla XSL meto el output con lo que me has dicho del method y el omit-declaration y genero el contenido de la web, es decir lo que va dentro del <body> con sus div, input y todo lo que vaya a tener la web.

Hay que hacerlo así pq si en el xsl generas toda al web con su <html> luego al cargarla en el default.aspx te genera etiquetas duplicadas de <html><head> etc dentro de su <body>, de esta forma consigo una generación de código limpio que MENOS MAL!!.

Bueno, espero que me haya explicado con claridad que veas como es lo que he estado desarrollando (y a seguir a partir de esto jeje) y que mil gracias por la paciencia sobretodo y la ayuda.

Un saludo!!
  #16 (permalink)  
Antiguo 16/06/2009, 10:09
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Respuesta: Problema con cabecera XML en Transformación XSLT - Ayuda

Hola

Si, imaginaba algo por el estilo, pero claro, no iba a hacer yo algo así para las pruebas.

;)

Sobre el xml físico o en un flujo de datos, eso no hace diferencia, porque en el xml estará la xsl, aunque sea en el xml en el flujo dinámico de datos, o en el procesador la unirás mediante algún comando, supongo que asp puede hacerlo, no lo se.

Sobre las partes que el xsl modifica, tampoco hay problema que solo sea un pedazo, a fin de cuentas, lo importante es lo que tengas en los templates; yo necesitaba hacer un archivo entero para poder probar la validación.

Pero bueno, al final entiendo que ya está solucionada la cosa.

No he revisado el otro tema que tenías, pero estaría bien que pases por ahi y menciones que está solucionado y pongas un vínculo a este tema, así con los códigos y lo que comentas, puede servir de referencia a alguien más en el futuro.

El xml siempre es un poco complejo de manejar, y cuando nos metemos con xslt, es mucho más aun debido a lo oscuro de las documentaciones, las diferencias de motores, la interpretación de los navegadores, etc.

Suerte

y Felicidad
__________________
¡ hey, hou, hou, hey !
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:15.