Hola a todos.
Sé que es un tema ya viejuno, pero no consigo leer un XML en condiciones.
La aplicación va a ser de momento de consola, y quiero no quiero (a no ser que sea imprescindible) usar componentes no incluidas en Delphi.
Bueno, creo un objeto Options.pas, que debe leer sus valores desde un XML:
Código:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OPTIONS>
<GENERAL>
<GEOMETRY>Segment</GEOMETRY>
<TOPOLOGY>Segment1</TOPOLOGY>
<TETIN>'C:\data\proyects\miProyecto\Tetin.tin'</TETIN>
</GENERAL>
<SegmentParameters>
<Blade_OGridParamPS Type="Float">0.85</Blade_OGridParamPS>
...
</SegmentParameters>
</OPTIONS>
.
Código Delphi
[-]
function TOptions.loadFileXML(aFilename: String): Boolean;
var
lNode : IXMLNode;
lXMLDoc : TXMLDocument;
...
begin
result := true;
lXMLDoc := TXMLDocument.Create( NIL );
lXMLDoc.FileName := aFilename;
lXMLDoc.Active := TRUE;
try
lNode := lXMLDoc.DocumentElement.ChildNodes.FindNode( 'GENERAL' );
result := (lNode <> NIL);
if not result then begin
logError( 'Unable to find node GENERAL in input file.');
exit;
end;
lNode := lNode.ChildNodes.First;
while lNode <> NIL do
begin
lStr := lNode.Text;
if (lNode.LocalName = coOptTetin) then
begin
lFoundTetin := true;
result := setTetin( lstr );
if (not result) then logError( 'Tetin file not found <'+lstr+'>');
end;
if not Result then exit;
lNode := lNode.NextSibling;
end;
...
finally
lXMLDoc.Destroy;
end;
Todo esto me lo hace bien, pero cuando entro en la función para hacer set de la variable del directorio tetin:
Código Delphi
[-]
function TOptions.setTetin(const aTetin: String): boolean;
var lOptionsMessage :String;
begin
result := FileExists(aTetin);
FTetin := aTetin;
if result then
begin
lOptionsMessage := 'Set tetin file <'+ aTetin +'>.';
logMessage( lOptionsMessage);
end
else
begin
lOptionsMessage := format ( 'Tetin file <%s> not found.', [aTetin]);
logWarning( lOptionsMessage );
end;
end;
Pues en la línea
Código Delphi
[-] lOptionsMessage := 'Set tetin file <'+ aTetin +'>.';
lo que me hace además de igualar el string lOptionsMessage, me IGUALA EL VALOR DE FTetin A lOptionsMessage.
Estoy que me tiro de los pelos.
Ya he reiniciado varias veces, por si las moscas, que quitado todos los proyectos que tenía incluidos...
¿Alguna idea de lo que pasa?
Ah, y en uses tengo
Código Delphi
[-]
XMLDom, XMLDoc, XMLIntf, ActiveX
y un
en el create del objeto.