Salve 
Sempre per la famosa applicazione client-server (che sto recodando usando i componenti indy) ho sviluppato un protocollo che si basa sullo scambio tra client e server di dati formattati con xml.
Un esempio di formattazione dei dati potrebbe essere questa:
codice:
<valvonauta>
<header>
<comando>LOGIN</comando>
</header>
<info>
<username>VaLvOnAuTa</username>
</info>
</valvonauta>
Ora ho creato un datamodule con un XMLDocument che ha due funzioni:
Formattare il dato in xml ed estrarre i dati da una stringa (ovviamente formattata in xml).
Il codice è questo:
codice:
unit cProtocollo;
interface
uses
SysUtils, Classes, xmldom, XMLIntf, msxmldom, XMLDoc;
type
TProtocollo = class(TDataModule)
xmlDoc: TXMLDocument;
private
public
Comando : string;
function Tipo(pXml: string) : string;
function ToXml : string;
end;
var
Protocollo: TProtocollo;
implementation
function TProtocollo.Tipo(pXml: string): string;
var nNodo: IXMLNode;
begin
xmlDoc.Active:=False;
xmlDoc.XML.Text:=pXml;
try
xmlDoc.Active:=True;
nNodo:=xmlDoc.DocumentElement.ChildNodes['Header'];
Tipo:=nNodo.ChildNodes['Comando'].Text;
xmlDoc.Active:=False;
except
Tipo := '';
end;
end;
function TProtocollo.ToXml: string;
var vXML: string;
begin
vXml:= '<valvonauta>';
vXml:=vXml + ' <Header>';
vXml:=vXml + ' <Comando>'+ Comando +'</Comando>';
vXml:=vXml + ' </Header>';
vXml:=vXml + '</valvonauta>';
ToXml:=vXML;
end;
{$R *.dfm}
end.
La funzione "Tipo" mi serve per riconoscere il comando ricevuto.
Ora, il client utilizza lo stesso datamodule e riesce ad estrerre il comando correttamente.
Il server invece, mi da l'errore nel titolo.
Dato che sulla stessa macchina il client funziona (riesce ad estrarre correttamente il dato tra i tag <Comando> e </Comando>) ed il server no, credo ci sia qualcosa che mi sfugge, ma non è certo l'installazione dell' MSXML.