Ver Mensaje Individual
  #3  
Antiguo 07-08-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

El método que describe Caro puede ser más que suficiente y es muy sencillo. Aún así, dado que un archivo XML también es jerárquico, pudiera ser que te convenga más recorrer el árbol recursivamente:

1. Lees los nodos de primer nivel (días)
2. Por cada día, lees sus subnodos (turnos)
3. Por cada turno, lees sus subnodos (actividades)

Más o menos sería así:

Código Delphi [-]
var
  NodoDia: TTreeNode;

begin
  // Te colocas en el primer nodo del árbol
  NodoDia := TreeView1.Items.GetFirstNode();

  // Recorres los nodos de primer nivel (días)
  while Assigned(NodoDia) do
  begin
    (*
      Aquí trabajas con este día
    *)

    // Lees los turnos de este nodo
    LeerTurnos(NodoDia);

    // Avanzas al siguiente nodo del mismo nivel (dia)
    NodoDia := NodoDia.GetNextSibling();
  end;
end;

El método LeerTurnos trabaja con los subnodos del nodo (dia) que se le pase:

Código Delphi [-]
procedure LeerTurnos(NodoDia: TTreeNode);
var
  NodoTurno: TTreeNode;

begin
  // Te colocas en el primer subnodo (turno) de este dia
  NodoTurno := NodoDia.GetFirstChild();

  // Recorres los subnodos (turnos) de NodoDia
  while Assigned(NodoTurno) do
  begin
    (*
      Aquí trabajas con este turno
    *)

    // Lees las actividades de este nodo
    LeerActividades(NodoTurno);

    // Avanzas al siguiente nodo del mismo nivel (turno)
    NodoTurno:= NodoTurno.GetNextSibling();
  end;
end;

Finalmente, el método LeerActividades, trabaja con los subnodos del nodo (turno) que se le pase:

Código Delphi [-]
procedure LeerActividades(NodoTurno: TTreeNode);
var
  NodoActividad: TTreeNode;

begin
  // Te colocas en el primer subnodo (actividad) de este turno
  NodoActividad := NodoTurno.GetFirstChild();

  // Recorres los subnodos (actividades) de NodoTurno
  while Assigned(NodoActividad) do
  begin
    (*
      Aquí trabajas con esta actividad
    *)

    // Avanzas al siguiente nodo del mismo nivel (actividad)
    NodoActividad:= NodoActividad.GetNextSibling();
  end;
end;

// Saludos

Última edición por roman fecha: 07-08-2007 a las 06:35:28.
Responder Con Cita