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

Recordset Metodo SAVE

Estas en el tema de Recordset Metodo SAVE en el foro de ASP Clásico en Foros del Web. Hola a todos. Me hice una funcion que dado un recordSet lo transforma en un XML, de la siguiente forma: Código PHP:                 XmlTemplate . loadXML  ...
  #1 (permalink)  
Antiguo 04/11/2008, 07:50
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Recordset Metodo SAVE

Hola a todos.

Me hice una funcion que dado un recordSet lo transforma en un XML, de la siguiente forma:

Código PHP:
                XmlTemplate.loadXML (strXMLTemplate)
                
dbcRec.Save xmlObj1
                strXml 
xmlObj.transformNode(XmlTemplate
Donde strXMLTemplate tiene el String XSL que dara formato al Recordset.

Vengo usando esta funcion de hace años, pero hoy intente transformar un RS en un XML , pero una y otra vez, la funcion me devolvia un XML vacio : <root></root>

Despues de investigar por horas me di cuenta que el problema lo tiene el dato que viene en el RS. En particular un solo CARATER: CHR(11)

La verdad es que una salida facil seria buscar por este caracter en la BD y limpiarlo, pero quiero hacer una solucion mas definitiva. (no se porque pero El CDATA no funciona en este caso)

Me hice una funcion que limpia carateres extraños como el chr(11) (que al parecer es una basura que queda cuando la gente pega texto directo desde el WORD) pero nose por donde aplicarsela en la linea en que se transforma el recordset con el XSL en la linea dbcRec.Save xmlObj, 1

Si alguien sabe como poder aplicar esta funcion, sin tener que recorrer el recordset uno a uno, me serviria demasiado.

de antemano gracias.






Parte de la funcion que transforma el recordset en XML esta aqui.

Código PHP:
    Set xmlObj = Server.CreateObject("MSXML2.DOMDocument")
    Set XmlTemplate =  Server.CreateObject("MSXML2.DOMDocument")
    strXMLTemplate = "<?xml version=""1.0""?>"
    strXMLTemplate = strXMLTemplate & "<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:z=""#RowsetSchema"" xmlns:rs=""urn:schemas-microsoft-com:rowset"">"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "<xsl:output method=""xml"" indent=""yes"" omit-xml-declaration=""yes""/>"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "<xsl:template match=""/"">"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "<xsl:element name=""cryptic_writings"">"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "<xsl:for-each select=""/xml/rs:data/z:row"">"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "<xsl:element name=""reg"">"  & vbCrLf
    For xCount = 0 To dbcRec.Fields.Count - 1
    strXMLTemplate = strXMLTemplate & "<xsl:element name=""" & lcase(dbcRec(xCount).Name) & """>" & vbCrLf
    strXMLTemplate = strXMLTemplate & "<xsl:value-of select=""@" & dbcRec(xCount).Name & """/>" & vbCrLf
    strXMLTemplate = strXMLTemplate & "</xsl:element>" & vbCrLf
    Next
    strXMLTemplate = strXMLTemplate & "</xsl:element>"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "</xsl:for-each>"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "</xsl:element>"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "</xsl:template>"  & vbCrLf
    strXMLTemplate = strXMLTemplate & "</xsl:stylesheet>"  & vbCrLf
    XmlTemplate.loadXML (strXMLTemplate)
    dbcRec.Save xmlObj, 1
    strXml = xmlObj.transformNode(XmlTemplate)
    Set XmlTemplate = Nothing
    Set xmlObj = Nothing
    dbcRec.Close
  #2 (permalink)  
Antiguo 05/11/2008, 08:45
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Recordset Metodo SAVE

Todavia hay tiempo para ayudarme.
anyone????
  #3 (permalink)  
Antiguo 05/11/2008, 12:23
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 1 mes
Puntos: 88
Respuesta: Recordset Metodo SAVE

perdona... como recojes las variables para la transformacion del XML???
dices que de un recordset... no es asi??? en que paso mandas el contenido del recordset al XML??? no puedes utilizar una funcion que reemplasca a todos los caracteres extraños antes de enviarlo al XML????

.... aunque probablemente este metodo tambien lo puedas utilizar dentro del ciclo FOR
Cita:
For xCount = 0 To dbcRec.Fields.Count - 1
'metodo de limpieza, podria ser aqui ????
strXMLTemplate = strXMLTemplate & "<xsl:element name=""" & lcase(dbcRec(xCount).Name) & """>" & vbCrLf
strXMLTemplate = strXMLTemplate & "<xsl:value-of select=""@" & dbcRec(xCount).Name & """/>" & vbCrLf
strXMLTemplate = strXMLTemplate & "</xsl:element>" & vbCrLf
Next
por al parecer en esa parte creas tus nodos..... a lo mejor estoy divagando,
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #4 (permalink)  
Antiguo 06/11/2008, 08:41
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Recordset Metodo SAVE





Este es el metodo que logra transformar el recordset en XML aplicandole el formato del XSL.

XmlTemplate.loadXML (strXMLTemplate) Esta linea carga el objeto XSL basandose en un STRING que se contruye segun la cantidad de campos del recordset.

dbcRec.Save xmlObj, 1 Esta linea graba el RS en el objeto XML

strXml = xmlObj.transformNode(XmlTemplate) y esta aplica el formato, logrando finalmente la construccion del XML con los datos que trae el RS


y esa es la cuestion. No se me ocurre como aplicarle la funcion que LIMPIA los caracteres problematicos.
Nose si me explico bien.
  #5 (permalink)  
Antiguo 06/11/2008, 10:17
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Respuesta: Recordset Metodo SAVE

Hola, mi opinión es que si de todas maneras recorres el recordset uno a uno hagas la llamada a tu función de limpiar caracteres ahí mismo.

Ahora, me parece que al xsl le podrías aplicar otro template, hace un rato que no toco xsl así que estoy un poco oxidado, pero si no mal recuerdo podrías utilizar la función translate de xsl, y me parece que el equivalente de tab en xml debería ser "&#x9;" aunque como dije anteriormente, me parece que es demasiado complicarse, pues también habrán otras cosas que quieras reemplazar, mejor haría la llamada a la función de VBS durante la iteración del recordset.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 13:29.