Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-08-2007
Avatar de b3nshi
b3nshi b3nshi is offline
Miembro
 
Registrado: feb 2005
Ubicación: Tucuman - Argentina
Posts: 164
Poder: 20
b3nshi Va por buen camino
Leer XML - error?

Bueno esta es la estructura del archivo xml q estoy queriendo leer:
Código:
<?xml version="1.0"?>
<Agenda>
<Dia>Lunes
<Horario>Mañana</Horario>
<Horario>Tarde
<Actividad>ir a un lugar</Actividad>
<Actividad>ir a un lugar</Actividad>
</Horario>
<Horario>Noche</Horario>
</Dia>
<Dia>Martes
<Horario>Mañana</Horario>
<Horario>Tarde</Horario>
<Horario>Noche</Horario>
</Dia>
<Dia>Miercoles
<Horario>Mañana
<Actividad>ir a un lugar</Actividad>
<Actividad>ir a un lugar</Actividad>
</Horario>
<Horario>Tarde</Horario>
<Horario>Noche
<Actividad>ir a un lugar</Actividad>
<Actividad>ir a un lugar</Actividad>
</Horario>
</Dia>
<Dia>Jueves
<Horario>Mañana</Horario>
<Horario>Tarde</Horario>
<Horario>Noche</Horario>
</Dia>
<Dia>Viernes
<Horario>Mañana</Horario>
<Horario>Tarde
<Actividad>ir a un lugar</Actividad>
<Actividad>ir a un lugar</Actividad>
</Horario>
<Horario>Noche</Horario>
</Dia>
<Dia>Sabado
<Horario>Mañana</Horario>
<Horario>Tarde</Horario>
<Horario>Noche</Horario>
</Dia>
<Dia>Domingo
<Horario>Mañana</Horario>
<Horario>Tarde</Horario>
<Horario>Noche</Horario>
</Dia>
</Agenda>
En cada horario pueden haber diferente cantidad de actividades guardadas...
Y este es el codigo q esoty implementando para ello... pero me aparece un error... al parecer es donde lo indico, pero no se porq...
Código Delphi [-]
//prodecimiento
var
h,d,j,i : integer;
nhorario: ttreenode;
ndia, nhor, nsec: IXMLNode;
const
dias : array [0..6] of string =  ('Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo');
hora : array [0..2] of string =  ('Mañana','Tarde','Noche');

{bueno primero cargo el documento}
xml1.loadfromfile('planes\' + enom.Text +'.lp');
//xml1.FileName := 'planes\' + enom.Text +'.lp';
xml1.Active := true;
{ahora tengo q empezar a leer}
d:= 0;
h:= 0;
  repeat//Para los dias
  ndia := xml1.DocumentElement.ChildNodes.First.ChildNodes.FindNode('Dia');
  nhor := ndia.ChildNodes.findnode('Horario'); //AQUI ESTA EL PROBLEMA
    repeat//este es para el horario
              //Aqui coloco un for para ir cargando en el treeview
              //Recorro todo el treeview
              for i := 0 to actividad.Items.Count - 1 do
                begin
                  if uppercase(trim(actividad.Items[i].Text)) = uppercase(trim(dias[d])) then
                    begin
                       for j := 0 to actividad.items[i].Count - 1 do
                          begin
                             if uppercase(trim(actividad.Items[i + j].Text)) = uppercase(trim(hora[h])) then
                               begin
                                 nhorario := actividad.Items[i + j];
                                 actividad.Items.AddChild(nhorario,nhor.ChildNodes['Actividad'].Text);
                               end;
                           end;
                       end;
                   end;//Fin del for principal

    h := h+1;
    nhor := nhor.NextSibling; //Avanzo al siguiente horario
    until  nhor = nil; //Repeat  de los horarios
  
  d := d+1; //Para moverme en el array de los dias
  ndia := ndia.NextSibling; //avanzo al siguiente dia
  until ndia = nil; //Este es el repeat de los dias
xml1.Active := false;
end;

Lo que intento hacer es cargar en un treeview q se llama "actividad" Tengo q aclarar q ese treeview ya tiene cargado los dias y los horarios... solo resta cargarle las actividades en sus respectivos horarios...

Espero q alguien pueda ayudarme... muchisimas gracias!

{Saludos}

Última edición por b3nshi fecha: 11-08-2007 a las 21:41:06.
Responder Con Cita
  #2  
Antiguo 11-08-2007
Avatar de b3nshi
b3nshi b3nshi is offline
Miembro
 
Registrado: feb 2005
Ubicación: Tucuman - Argentina
Posts: 164
Poder: 20
b3nshi Va por buen camino
Por favor ayuda!

No puedo resolver el problema... le estoy dando vueltas al asunto y nada... no consigo hacerlo... por favor si a alguien se le ocurre como hacerlo le agradeceria muchisimo...

{Saludos}

Última edición por b3nshi fecha: 11-08-2007 a las 21:37:50.
Responder Con Cita
  #3  
Antiguo 13-08-2007
Avatar de b3nshi
b3nshi b3nshi is offline
Miembro
 
Registrado: feb 2005
Ubicación: Tucuman - Argentina
Posts: 164
Poder: 20
b3nshi Va por buen camino
Solucionado!!

Gracias de todos modos... y bueno... les cuento q hice para solucionarlo si?

Empecé por guardarlo de otra forma al archivo xml... usando la propiedad attributes de los nodos... por lo que mi archivo quedo mucho mas elegante... por asi decirlo... y bueno utilice este codigo para abrirlo

Código Delphi [-]
xml1.loadfromfile('agenda\' + enom.Text +'.ext');
xml1.Active := true;
ndia := xml1.DocumentElement.ChildNodes.FindNode('Dia');
repeat
  //Agrego al tree view
  ntdia := agenda.Items.Addchild(nil,ndia.Attributes['Text']);
  nhor := ndia.childnodes.FindNode('Horario');
      repeat
      nthor := agenda.Items.AddChild(ntdia,nhor.Attributes['Text']);
      nact := nhor.ChildNodes.FindNode('Actividad');
      if nact <> nil then
       repeat
       ntact := agenda.Items.AddChild(nthor,nact.Attributes['Text']);
       //Agrego al tree view
       nact := nact.NextSibling;
       until nact = nil ;
       nhor := nhor.NextSibling;
      until nhor = nil;
    //STitle := ANode.ChildNodes['title'].Text;
  ndia := ndia.NextSibling;
until ndia = nil  ;
xml1.Active := false;

Aclaro q esta solucion la encontre yo... y puede haber otra mejor de leer los datos... lei de muchos lugares muchos metodos... e inclusive con otros componentes q facilitan mucho el manejo... pero por una cuestion de q utilizo Turbo Delphi no puedo instalar componentes... y ademas para ahorrarme problemas con licencias prefiero usar componentes delphi...

El problema aparentemente era porq no encontraba ese nodo, pero una vez encontrado el problema aparecia en las actividades y era debido a que podia o no haber una actividad cargada en el horario y bueno... una vez validado eso no hubo problemas...

Les agradezco a aquellos quienes hayan intentado encontrar la solucion!
Y gracias al mismo tiempo porq aprendi mucho resolviendolo!

Por cierto! Casi me vuelvo loco... jajaj...

{Saludos}
Responder Con Cita
  #4  
Antiguo 13-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Que bueno, que hayas encontrado la solución y que ademas la hayas compartido con nosotros, pero me quedaron unas dudas...

Haz dicho esto...

Empecé por guardarlo de otra forma al archivo xml... usando la propiedad attributes de los nodos... por lo que mi archivo quedo mucho mas elegante... por asi decirlo...

¿Cuales fueron y de que componente eran esos atributos, del TXMLDocument o del TTreeview? y otra duda ¿Podrias mostrarnos como quedo tu archivo XML?

Bueno, me interese por este tema y aunque no logre aportarte nada al respecto, realmente me interesa saber como quedaron esos asuntitos .

Por tu tiempo y conocimientos prestados, muchisimas gracias
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 13-08-2007
Avatar de b3nshi
b3nshi b3nshi is offline
Miembro
 
Registrado: feb 2005
Ubicación: Tucuman - Argentina
Posts: 164
Poder: 20
b3nshi Va por buen camino
jaja... la verdad q me exprese muy mal y no explique muy bien... en realidad no se si estare hablando con propiedad... desde mi ignorancia voy a tratar de explicar la diferencia entre el archivo de antes y el de ahora...

Primero... use un componente Txmldocument para crear, modificar y abrir archivos xml... y bueno... un componente treeview para verlo...

En mi caso... yo creaba un treeview con estos datos:
dia
-->horario
------->Actividad

Siendo dia... los 7 dias de la semana... y horario (mañana, tarde y noche) y estos datos no podian variar en mi treeview, pero el dato q si podia variar era actividad... ya q podia cargar 0 - 1 o 5 actividades en un horario...

Para crear el fichero utilice este codigo... no es sacado de ningun lugar... lo hice yo con la ayuda de caro y roman para moverme en el treeview. Y bueno... lei bastante sobre archivos xml...

Aqui el codigo
xml1 es el componente Txmldocument
agenda es el componente Treeview
Código Delphi [-]
var
i: integer;
ndia, nage, nhor, nact: IXMLNode;
begin
{Guardo la actividad}
  xml1.filename := ''; //porq uso el mismo componente para abrir, se puede crear en tiempo de ejecucion y este problema no apareceria
 xml1.Active := True;
  //Ahora si creo el xml
  xml1.Version := '1.0';
 nage := Xml1.AddChild('Agenda');
 for i := 0 to agenda.Items.Count - 1 do
   begin
       case plan.Items[i].Level of
         0:begin ndia := nage.AddChild('Dia'); ndia.Attributes['Text']:= agenda.Items[i].Text; end;
         1:begin nhor := ndia.AddChild('Horario'); nhor.Attributes['Text'] := agenda.Items[i].Text;end;
         2:begin nact := nhor.AddChild('Actividad'); nact.Attributes['Text'] := agenda.items[i].Text; end;
        end;
   end; //Fin del for
  //ahora si guardo el archivo xml
  xml1.SaveToFile('agenda\' + trim(enom.text) + '.ext');
  xml1.active:= false;
end; //Fin del procedimiento q crea el fichero
Y asi quedo guardado el archivo XML...
Código:
<?xml version="1.0"?>


<Agenda>
<Dia Text="Lunes"><Horario Text="Mañana"><Actividad Text="La actividad"/></Horario><Horario Text="Tarde"/></Horario><Horario Text="Noche"/></Dia>
<Dia Text="Martes"><Horario Text="Mañana"></Horario><Horario Text="Tarde"/><Actividad Text="La actividad"/></Horario><Horario Text="Noche"/></Dia>
<Dia Text="Miercoles"><Horario Text="Mañana"><Actividad Text="La actividad"/></Horario><Horario Text="Tarde"/></Horario><Horario Text="Noche"/><Actividad Text="La actividad"/></Dia>
<Dia Text="Jueves"><Horario Text="Mañana"><Actividad Text="La actividad"/></Horario><Horario Text="Tarde"/></Horario><Horario Text="Noche"/></Dia>
<Dia Text="Viernes"><Horario Text="Mañana"><Actividad Text="La actividad"/></Horario><Horario Text="Tarde"/></Horario><Horario Text="Noche"/></Dia>
<Dia Text="Sabado"><Horario Text="Mañana"></Horario><Horario Text="Tarde"/><Actividad Text="La actividad"/></Horario><Horario Text="Noche"/></Dia></Dia>
<Dia Text="Domingo"><Horario Text="Mañana"><Actividad Text="La actividad"/></Horario><Horario Text="Tarde"/></Horario><Horario Text="Noche"/></Dia></Agenda>
En cuanto al codigo para abrir el archivo y mostrarlo en el treeview es este:
Código Delphi [-]
xml1.loadfromfile('agenda\' + enom.Text +'.ext');
xml1.Active := true;ndia := xml1.DocumentElement.ChildNodes.FindNode('Dia');
repeat  //Agrego al tree view  
 ntdia := agenda.Items.Addchild(nil,ndia.Attributes['Text']);
 nhor := ndia.childnodes.FindNode('Horario');      
   repeat      
      nthor := agenda.Items.AddChild(ntdia,nhor.Attributes['Text']);      
      nact := nhor.ChildNodes.FindNode('Actividad');      
        if nact <> nil then      
            repeat       
              ntact := agenda.Items.AddChild(nthor,nact.Attributes['Text']);
              //Agrego al tree view  
              nact := nact.NextSibling;       
            until nact = nil ; 
      nhor := nhor.NextSibling;
   until nhor = nil; 
ndia := ndia.NextSibling;
until ndia = nil  ;
xml1.Active := false;
En el caso de crear el componente Txmldocument en tiempo de ejecucion al final se debe dar el valor de nil...
Código Delphi [-]
xml1 := nil;

Y bueno... creo q eso seria todo... cualquier duda sigo leyendo y aprendiendo por lo q quizas pueda ayudar mas...

{Saludos}

Última edición por b3nshi fecha: 13-08-2007 a las 20:28:19.
Responder Con Cita
  #6  
Antiguo 13-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Pues de nuevo gracias, ahora a ensayar y a ver que tal esta la cosa
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 13-08-2007
Avatar de b3nshi
b3nshi b3nshi is offline
Miembro
 
Registrado: feb 2005
Ubicación: Tucuman - Argentina
Posts: 164
Poder: 20
b3nshi Va por buen camino
No hay porq agradecer... siempre soy yo el que pide ayuda!

Suerte!

{Saludos}
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
leer de fichero machingol Varios 7 09-05-2007 17:22:42
Leer Archivo txt Yssik OOP 5 26-01-2007 16:12:15
Leer *.res dmagui Varios 5 04-10-2005 22:40:32
Leer usb trex2000 Varios 1 14-03-2005 12:51:41
Error Antes De Leer El Trigger ALMERA Firebird e Interbase 1 01-08-2003 17:27:03


La franja horaria es GMT +2. Ahora son las 10:15:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi