
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 xmlObj, 1
strXml = xmlObj.transformNode(XmlTemplate)
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