Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 24-04-2015
Avatar de arturom
arturom arturom is offline
Miembro
 
Registrado: dic 2003
Ubicación: Alicante
Posts: 91
Poder: 21
arturom Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Sobre todo verifica si la variable "i" tiene el valor correcto.
Puede que estés pidiendo la cantidad de nodos del registro anterior, si no has incrementeado todavía esta variable.

Como te dice Casimiro: Pon un poco más de código. Sobre todo las partes en donde haces el bucle sobre "i" y dónde la incrementas.
Gracias por vuestra respuesta.

Este el procedimiento que hace la lectura del archivo. Los datos que se obtienen se pasan a un componente MEMO (recordad que sólo estoy haciendo pruebas)

El error salta al llegar a la línea
Código:
Memo.Lines.Add(IntToStr(i) + '.' + IntToStr(j) + ' ' + Item[j].NodeName + ' -> ' + Item[j].FirstChild.NodeValue);
cuando llega al registro 9 (que tiene 33 campos, uno más que los 8 anteriores).

Como información, si sólo dejo 8 registros en el archivo XML el programa no falla.

Código Delphi [-]
procedure TFLMXL.btnLeerClick ( Sender:TObject ) ;
var
  //variable de tipo TXMLDocument para cargar documentos XML
  Doc :  TXMLDocument;
  i, j : integer;
begin
  Doc := TXMLDocument.Create;
  //cargando el archivo XML
  ReadXMLFile(Doc, 'ListaArticulos.xml');
  Memo.Lines.Clear;
  //obteniendo el nombre del nodo raiz
  Memo.Lines.Add('Archvo tipo : '+Doc.DocumentElement.NodeName);
  //trabajando con los nodos inferiores a la raiz
  with Doc.DocumentElement.ChildNodes do begin
    {la variable "Count", propiedad de ChildNodes
     contiene el numero total de nodos hijos que existen
     en este caso en el nodo raiz}
     for i := 0 to (Count - 1) do begin
      {Item[i] es el nodo al que vamos a acceder y su propiedad
       NodeName nos devuelve el nombre del nodo}
      Memo.Lines.Add(intToStr(i)+'. '+Item[i].NodeName);
      {ahora usamos la propiedad Count pero ahora de los nodos
       con los que estamos trabajando}
       for j := 0 to (Item[i].ChildNodes.Count - 1) do begin
        {ahora entraremos a los nodos hijos de los nodos
         anteriores}
        with Item[i].ChildNodes do begin
          {Item[j].FirstChild nos devuelve el primer nodo hijo y
           NodeValue es la propiedad que nos devolvera el valor
           o contenido de ese nodo}
          Memo.Lines.Add(IntToStr(i)+'.'+IntToStr(j)+' '
            + Item[j].NodeName + ' -> '
            + Item[j].FirstChild.NodeValue);
          if Item[j].NodeName = 'val' then
            Memo.Lines.Add('  Atrbuto "tipo" del nodo val = '
            + Item[j].Attributes.GetNamedItem('tipo').NodeValue);
              {Para obtener los atributos de un nodo utilizamos la propiedad Attributes}
        end;
      end;
    end;
  end;
  Doc.Free;
  //es necesario liberar la memoria que ocupo la variable Doc
end;

Adjunto el fichero que tengo para hacer las pruebas (es una parte del original con solamente 10 registros).

Pd. He compilado en 32 y 64 y el resultado es el mismo.
Ppd. Las unidades que usa el programa son DOM y XMLRead
Archivos Adjuntos
Tipo de Archivo: zip ListaArticulos.xml.zip (4,3 KB, 14 visitas)
__________________
"No guardes nunca en la cabeza aquello que te quepa en un bolsillo."

Albert Einstein
Responder Con Cita
 



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
Fin de archivo leyendo archivos de texto lbidi Varios 3 28-03-2014 20:16:45
Qué libro estoy leyendo? marcoszorrilla La Taberna 27 19-07-2011 00:39:14
Problema con ADO leyendo excel RICTAPIA5 Conexión con bases de datos 2 26-01-2011 18:09:04
leyendo tabla en excel solarin Conexión con bases de datos 3 25-01-2011 23:41:05
Error de logon 1326 leyendo carpeta con Windows 2003 Server JuanErasmo C++ Builder 0 16-09-2008 16:29:54


La franja horaria es GMT +2. Ahora son las 06:07:35.


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