Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   otra vez XML... (https://www.clubdelphi.com/foros/showthread.php?t=76986)

zampa 12-12-2011 16:29:02

otra vez XML...
 
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
Código Delphi [-]
  CoInitialize(nil);
en el create del objeto.


La franja horaria es GMT +2. Ahora son las 15:09:07.

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