FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Exportacion a XML
me encontre este codigo en varias paginas, sirve para la exportacion a XML, pero tengo problemas con este pues no sirve... aunque la idea general esta muy bien...
adjunto el codigo por si alguien mas avanzado en el tema puede decirme cual es el problema... variable Global
para la ejecucion...
Uso Delphi embarcadero 2010, y el problema que me da es en el archivo final generado... como que incluye espacios en blnco entre cada caracter.... si alguien tiene alguna idea... le agradesco... o si a alguien le corre sin problema, favor decirme para ver si podria ser algo en mi equipo... gracias |
#2
|
||||
|
||||
Hola; Lo primero decir que al colocar el código con los TAG's de Delphi (seguramente por un error en el parser) faltan cosas y el código ha quedado incorrecto (revisar el procedimiento WriteFileEnd, por ejemplo).
Lo coloco con las etiquetas CODE, por si alguien quiere copiarlo. Código:
procedure WriteString(Stream: TFileStream; s: string); begin StrPCopy(SourceBuffer, s); Stream.Write(SourceBuffer[0], StrLen(SourceBuffer)); end; procedure WriteFileBegin(Stream: TFileStream; Dataset: TDataset); //············································································ function XMLFieldType(fld: TField): string; begin case fld.DataType of ftString: Result := '"string" WIDTH="' + IntToStr(fld.Size) + '"'; ftSmallint: Result := '"i2"'; //?? ftInteger: Result := '"i4"'; ftWord: Result := '"i4"'; //?? ftBoolean: Result := '"boolean"'; ftAutoInc: Result := '"i4" SUBTYPE="Autoinc"'; ftFloat: Result := '"r8"'; ftCurrency: Result := '"r8" SUBTYPE="Money"'; ftBCD: Result := '"r8"'; //?? ftDate: Result := '"date"'; ftTime: Result := '"time"'; //?? ftDateTime: Result := '"datetime"'; else Result := '"TIPO-DESCONOCIDO"'; end; if fld.Required then Result := Result + ' required="true"'; if fld.Readonly then Result := Result + ' readonly="true"'; end; //············································································ var i: Integer; begin WriteString(Stream, '<?xml version="1.0" standalone="yes"?><!-- Generated by SMExport --> ' + '<DATAPACKET Version="2.0">'); WriteString(Stream, '<METADATA><FIELDS>'); {write th metadata} with Dataset do for i := 0 to FieldCount-1 do begin WriteString(Stream, '<FIELD attrname="' + Fields[i].FieldName + '" fieldtype=' + XMLFieldType(Fields[i]) + '/>'); end; WriteString(Stream, '</FIELDS>'); WriteString(Stream, '<PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/>'); WriteString(Stream, '</METADATA><ROWDATA>'); end; procedure WriteFileEnd(Stream: TFileStream); begin WriteString(Stream, '</ROWDATA></DATAPACKET>'); end; procedure WriteRowStart(Stream: TFileStream; IsAddedTitle: Boolean); begin if not IsAddedTitle then WriteString(Stream, '<ROW'); end; procedure WriteRowEnd(Stream: TFileStream; IsAddedTitle: Boolean); begin if not IsAddedTitle then WriteString(Stream, '/>'); end; procedure WriteData(Stream: TFileStream; fld: TField; AString: ShortString); begin if Assigned(fld) and (AString <> '') then WriteString(Stream, ' ' + fld.FieldName + '="' + AString + '"'); end; function GetFieldStr(Field: TField): string; //············································································ function GetDig(i, j: Word): string; begin Result := IntToStr(i); while (Length(Result) < j) do Result := '0' + Result; end; //············································································ var Hour, Min, Sec, MSec: Word; begin case Field.DataType of ftBoolean: Result := UpperCase(Field.AsString); ftDate: Result := FormatDateTime('yyyymmdd', Field.AsDateTime); ftTime: Result := FormatDateTime('hhnnss', Field.AsDateTime); ftDateTime: begin Result := FormatDateTime('yyyymmdd', Field.AsDateTime); DecodeTime(Field.AsDateTime, Hour, Min, Sec, MSec); if (Hour <> 0) or (Min <> 0) or (Sec <> 0) or (MSec <> 0) then Result := Result + 'T' + GetDig(Hour, 2) + ':' + GetDig(Min, 2) + ':' + GetDig(Sec, 2) + GetDig(MSec, 3); end; else Result := Field.AsString; end; end; He añadido esto al else:
Que te debería ayudar a detectar si ese es tu problema. Por lo demás yo lo he probado y parece que el código funciona bien.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Puedes utilizar una consulta en lugar de un DataSet ?
Puedes utilizar una consulta en lugar de un DataSet ?
Creo tener idea de como corregir el problema, ¿ puedes poner el resultado que obtienes en el XML ? ¿Puedes poner los datos que son usados en el DataSet? Gracias. |
#4
|
||||
|
||||
Cualquier TQuery, TTable, TADOTable,... deriva de un DataSet, por lo tanto puedes utilizarlo con el resultado de un quey sin problemas (así lo he probado yo).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Muchas gracias Neftali
Muchas gracias Neftali
|
#6
|
|||
|
|||
Duda acerca de nodos XML
Hola.
Intentando de otra forma he obtenido la siguiente estructura en el XML. Código PHP:
Código PHP:
Muchas gracias. |
#7
|
||||
|
||||
Cita:
el resultado que me da el archivo XML es: Código PHP:
Cita:
el dataset ejecuta una consulta de la tabla Personas(para este ejemplo especifico), y contiene...
pobre con los cambios de Neftali pero nada.. sigue igual... por cierto gracias por las prontas respuestas... Última edición por Wbarrantes fecha: 20-10-2010 a las 23:03:19. Razón: EDITAR SQL |
#8
|
||||
|
||||
Neftali...
Cita:
|
#9
|
||||
|
||||
Cita:
Habría que ir añadiendo los que faltan; Por ejemplo, al final puedes poner:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#10
|
||||
|
||||
Neftali
ok, genial, ya agregue los valores que hacian falta, (por cierto de donde tomas la tabla equivalencia de los valores, podria serme util en un futuro...)...
Pero sigo teniendo el problema en el archivo generado... como que mete un espacio en blanco entre cada caracter, antes de escribir el archivo xml... y ademas lo corta... por ejemplo la primera linea queda en el archivo Código PHP:
Código PHP:
|
#11
|
||||
|
||||
Cita:
En cuanto a los espacios no lo entiendo, porque eso lo añade esta línea que parece bastante "inofensiva". Código:
WriteString(Stream, '<?xml version="1.0" standalone="yes"?><!-- Generated by SMExport --> ' + '<DATAPACKET Version="2.0">');
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#12
|
||||
|
||||
muy confundido???
si de echo alli tengo misdudas pues debugeando, la informacion entra nitida.... tengo office 2007 y windows XP, y Delphi 2010 (con licencia)... no veo que pueda estar fallando... y ya pobre el ejecutable en otras maquinas y nada... WriteString
Write
de echo cuando trate de revisar el ejemplo para escribir en excell, tambien me dio este tipo de problemas... me ponia un caracter con signo de pregunta, entre cada caracter de la cadena del string, que deseabaguardar en una celda... pero ya lo he probado, tambien en otras maquinas con configuraciones diferentes, lo que me lleva a pensar que podrian ser la unidades, mas bien... |
#13
|
||||
|
||||
¿No estará relacionado con Unicode?
Lo digo por los 2 caracteres en lugar de 1.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#14
|
||||
|
||||
pos la verdad no se...
pos la verdad, en este momento, ya no me queda piedra sin revisar... al menos hasta donde mi "malicia indigena" alcanza...
inicailmente pense que podria estar cortando la cadena por el tamano del por lo que lo triplique...
pero el resultado es el mismo... estoy en un 98% convencido que el problema viene dado por el Stream, lo que me tiene chichoso, es que el problema no parece tenerlo nadie mas en este foro... pero si cambio de equipo y lo intento de nuevo, yo sigo teniendo problemas... |
#15
|
||||
|
||||
resp
Carga los datos en un cliendataset y lo guardas como xml esta atarea el clien dataset la hace solita.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Layouts de exportación | palets | Varios | 0 | 11-02-2009 16:58:22 |
exportacion de datos | LoboMDQ | Varios | 1 | 01-11-2006 02:17:24 |
Exportacion de datos... | chux | Varios | 6 | 10-05-2006 11:54:57 |
Exportacion de imagenes | Coco_jac | Gráficos | 0 | 10-06-2005 17:34:29 |
Exportación a Word | claumar | Impresión | 1 | 20-09-2004 13:48:43 |
|