Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/11/2008, 07:50
Avatar de Muzztein
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