Foros del Web » Programando para Internet » ASP Clásico »

Problema con la insercion de un xhtml con ASP/xml y xsl (SOLO EXPERTOS)

Estas en el tema de Problema con la insercion de un xhtml con ASP/xml y xsl (SOLO EXPERTOS) en el foro de ASP Clásico en Foros del Web. Holas... primero que nada me pondré a llorar , tengo un tremendo proyecto que esta sindo paralizado solo por este asunto... si no funciona esto, ...
  #1 (permalink)  
Antiguo 29/09/2004, 12:05
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Problema con la insercion de un xhtml con ASP/xml y xsl (SOLO EXPERTOS)

Holas... primero que nada me pondré a llorar , tengo un tremendo proyecto que esta sindo paralizado solo por este asunto... si no funciona esto, tendre que cambiar la arquitectura del sistema, cosa que no deseo hacer.

aqui voy:

tengo 4 archivos que para el ejemplo llamaremos : "asp.asp" "xml.xml" "xsl.xsl" y finalmente "xhtml.xhtml"

basicamente la arquitectura es asi.

asp.asp llama al xml.xml guardado en el disco duro y lo formatea segun xsl.xsl, dentro de este se llama al contenido encontrado en xhtml.xhtml el cual es desplegado en la pantalla.

hasta ahi todo bien.

El problema empieza cuando el xml no es llamado desde el disco duro, sino que es llamado desde una variable en la pagina asp.asp

el codigo asp que no da problema es este:

Código:
<%

Set xmlObj = Server.CreateObject( "MSXML2.DOMDocument" )
Set xslObj = Server.CreateObject( "MSXML2.DOMDocument" )

	xmlObj.load( Server.MapPath("xml.xml"))
	xslObj.load( Server.MapPath("xsl.xsl"))
	
	
	htmlConstruct = xmlObj.TransformNode(xslObj)
	Response.Write htmlConstruct
	
Set xmlObj = nothing
Set xslObj = nothing

%>
el codigo xml es el siguiente

Código:
<super>
<principal>
<canal_actual>4</canal_actual>
</principal>
<canal_publicaciones>
<reg>
<id_class>4</id_class>
<xhtml_canal_publicaciones>xhtml.xhtml</xhtml_canal_publicaciones>
</reg>
</canal_publicaciones>
</super>

el codigo xsl es el siguiente

Código:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" omit-xml-declaration="yes" /> 
<xsl:template match="/"> 
<xsl:for-each select="super/canal_publicaciones/reg">
<xsl:if test="id_class = /super/principal/canal_actual">
<xsl:copy-of select="document(xhtml_canal_publicaciones)" />
</xsl:if>
</xsl:for-each>
</xsl:template> 
</xsl:stylesheet>
el codigo xhtml es el siguiente

Código:
<?xml version="1.0" encoding="iso8859-1" ?>
<iws_xhtml><b>Hola mundo</b> 
</iws_xhtml>

Si se ejecuta todo esto junto todo funciona bien y el texto hola mundo en negritas es desplegado en la pantalla.

PERO

si es que se usa este codigo para el asp :

Código:
<%

xml = "<super><principal><canal_actual>4</canal_actual></principal><canal_publicaciones><reg><id_class>4</id_class><xhtml_canal_publicaciones>xhtml.xhtml</xhtml_canal_publicaciones></reg></canal_publicaciones></super>"

Set xmlObj = Server.CreateObject( "MSXML2.DOMDocument" )
Set xslObj = Server.CreateObject( "MSXML2.DOMDocument" )

	xmlobj.loadXML xml
	xslObj.load( Server.MapPath("xsl.xsl"))
	
	
	htmlConstruct = xmlObj.TransformNode(xslObj)
	Response.Write htmlConstruct
	
Set xmlObj = nothing
Set xslObj = nothing

%>
el asunto ya no funciona!
el error que arroja es que el sistema no ha podido encontrar el archivo XHTML

al parecer el problema viene cuando el objto xml es cargado desde una variable y no del disco duro.
para ser mas detallista en el analisis del problema.
en el xsl hay una instruccion que aparentemente no funciona cuando el xml no es cargado desde el disco duro, la cual es:

<xsl:copy-of select="document(xhtml_canal_publicaciones)" />


Si alguien sabe Que demonios pueda esta pasando , se lo agradeceria un millon

Para el sistema, es imperativo poder cargar el xml desde una variable, ya que me permite poder anexar informacion dinamica del ambiente (como datos y preferencias del visitante, fecha,seccion actual a mostrar,etc) anexarla al xml y alimentar asi el xsl para su final despliegue.


Última edición por Muzztein; 29/09/2004 a las 12:10
  #2 (permalink)  
Antiguo 30/09/2004, 08:18
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Bueno ñoños, para variar me contesto solo.
asi que aqui les voy con la solucion al problema porsicaso a alguien le interesa, o le llega a servir algun dia.


Resulta que estuve leyendo manuales del xsl donde explican que la funcion

<xsl:copy-of select="document(tag_del_xml)" />

copia el contenido del documento que se esta haciendo referencia en el xml.

la ruta donde va a buscar el archivo que se hace referencia en el xml

por ejemplo :

<tag_del_xml>../direccion/documento.xhtml</tag_del_xml>

se toma segun la direccion fisica del documento xml que hace la referencia.

Por lo tanto , si es que el XML es creado en un ASP a traves de la concatenacion de variables y no de la carga de un documento xml guardado en el disco duro.

¿como iba a ser posible que el xsl fuera a encontrar el documento que se hace referencia en el xml , si es que este mismo no tenia direccion fisica en el disco duro?

imposible.

Es por eso que para lograr hacer lo propuesto es imperativamente necesario generar un xml a traves de la concatenacion de variables, guardar este documento al disco duro y finalmente cargarlo del disco duro, para que asi tuviera una direccion fisica y el xsl pudiera encontrar el archivo que se hacia referencia en el xml.

DUH !!!!
elemental mi querido watson

bueno espero que a alguien le sirva el que me haya quebrado el mate tratando de darle solucion a este misterio.

que por cierto, me permitirá implementar una de las arquitecturas mas shuper eshpeshiales que he hecho en mi vida.

SALUDOS!


y aplausos para mi, por ser tan iluminado


jejejejeje
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 11:02.