¡¡¡PRUEBA SUPERADA!!!
Hola Helbira, hola maltos.
Lo he conseguido, ya recibo XML de Flash en ASP
Y como lo prometido es deuda, paso a explicar el tema:
Lo de los espacios en blanco en Flash, lo he resuelto colocando cada línea del campo de texto que el usuario utiliza para introducir los datos en un Array al que he llamado “lineas”. Luego sólo tengo que localizar cualquier elemento del Array cuya longitud sea 1 y sustituirlo por una cadena vacía. Ya sé que no es lo mejor pero como en esta aplicación es prácticamente imposible que haya líneas de texto cuya longitud sea 1, exceptuando los retornos de carro, pues la solución me vale perfectamente.
He aquí el código Flash puesto en el botón de envío:
on (rollOver) {
//lineas es un Array que está en el nivel cero.
//ALetra, titulo, y autor son campos de texto donde el usuario introduce lo que quiere guardar.
_level0.lineas = _level0.ALetra.split("\r");
}
on (press, releaseOutside) {
_level0.ALetra = "";
for (i=0; i<_level0.lineas.length; i++) {
if (_level0.lineas[i].length == 1) {
_level0.lineas[i] = "";
}
_level0.letrafin += "\r<P>"+_level0.lineas[i]+"</P>";
}
_level0.xml0 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r<obra>\r<title>"+_level0.titulo+"</title>\r"+"<autor>"+_level0.autor1[1]+"</autor>\r"+"<letra>"+_level0.letrafin+"\r</letra>\r</obra>";
updateAfterEvent();
}
on (release) {
_level0.xml2.parseXML(_level0.xml0);
_level0.xml2.sendAndLoad("probandoFSO4.asp?time="+ tmp.getTime(), _level0.xml2);
delete _level0.valor1;
}
Luego en el mismo fotograma de Flash preparo la recepción de la respuesta del servidor en el mismo objeto que utilicé para enviar el XML:
xml2 = new XML();
xml2.onLoad = function(success) {
if (success) {
_level0.ALetra = xml2;
} else {
_level0.ALetra = "No se ha recibido respuesta del Servidor";
}
};
Y por fín el código en ASP:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
Option Explicit
Response.buffer=True
Response.addHeader "pragma", "no-cache"
Response.CacheControl = "Private"
Response.Expires=-1500
Dim objXML1, objXML2, objXMLfin, fso, tf, xmlfin, title, autor, letra, node
'Recibimos el XML de Flash como colección Form.
objXML1 = Request.Form()
'Creamos un objeto XMLDOM para que reciba el XML de Flash.
Set objXML2 = Server.CreateObject("Microsoft.XMLDOM")
objXML2.async = False
objXML2.loadXML(objXML1)
'Analizamos lo recibido y elegimos lo que nos interesa.
Set objXMLfin = objXML2.selectnodes("obra")
for each node in objXMLfin
title = node.selectsinglenode("title").xml
autor = node.selectsinglenode("autor").xml
letra = node.selectsinglenode("letra").xml
next
'Configuramos una cadena XML de respuesta que nos sirva para crear el archivo XML.
xmlfin = "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbcrlf & "<obra>" & vbcrlf & title & vbcrlf & autor & vbcrlf & letra & vbcrlf & "</obra>"
'Creamos el objeto que nos permite escribir el XML a disco.
Set fso = CreateObject("Scripting.FileSystemObject")
'Lo escribimos en la ruta que queramos.
Set tf = fso.CreateTextFile(Server.MapPath("/PruebaXML/resultado.xml"), True)
tf.Write(xmlfin)
tf.Close
'Le respondemos a Flash lo que nos interese mostrar al usuario.
Response.Write("Este es el objeto XML que se escribirá en el directorio:" & xmlfin & "<br>Gracias por haberme ayudado ")
'Destruimos los Objetos y abandonamos la sesión con ASP.
Set fso = nothing
Set tf = nothing
Set objXML2 = nothing
Set objXMLfin = nothing
Session.Abandon
%>
Como véis el fallo lo tenía en la propiedad del objeto Request
, ya que en lugar de recoger una cadena como hacía hasta el momento
objXML1 = Request(“xml0”) , tenía que recibir un objeto de la colección Form(), o sea:
objXML1 = Request.Form()
No sé si os lo he dicho ya pero...
¡¡¡MUCHÍSIMAS GRACIAS POR VUESTRA AYUDA!!!
Un saludo.