Cita:
Empezado por duilioisola
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
Doc : TXMLDocument;
i, j : integer;
begin
Doc := TXMLDocument.Create;
ReadXMLFile(Doc, 'ListaArticulos.xml');
Memo.Lines.Clear;
Memo.Lines.Add('Archvo tipo : '+Doc.DocumentElement.NodeName);
with Doc.DocumentElement.ChildNodes do begin
for i := 0 to (Count - 1) do begin
Memo.Lines.Add(intToStr(i)+'. '+Item[i].NodeName);
for j := 0 to (Item[i].ChildNodes.Count - 1) do begin
with Item[i].ChildNodes do begin
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);
end;
end;
end;
end;
Doc.Free;
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