Hi Leute, ich möchte per HTTP-Post-Request Daten an einen Server schicken , welcher diese dann interpretiert. Die Daten werden im
XML-Format übertragen.
Hierzu habe ich die
INDY-HTTP-Server - Komponente auf meinem Formular plaziert.
Ankommende daten werden wie folgt verarbeitet bei der HTTP-Server -Komponente:
Delphi-Quellcode:
procedure Tfrm_main.http_serverCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
str_datastring:
string;
begin
//Das XML - Glied herausfinden
str_datastring := streamtostring(arequestinfo.PostStream);
str_datastring := copy(str_datastring,pos('
<xml',str_datastring),pos('
</xml>',str_datastring)+length('
</xml>')-pos('
<xml',str_datastring));
//Logging
log('
Receiving data from ' + ARequestInfo.Host + '
: ' + str_datastring);
AResponseInfo.ContentText := parse_xml(str_datastring);
AResponseInfo.WriteContent;
log('
ende');
end;
Mit der Funktion Log schreibe ich in ein Memofeld und sehe, dass in str_datastring mein
XML-String einwandfrei ankommt.
Lasse ich genau diesen
XML-String manuell durch parse_xml() interpretieren läuft das ganze auch einwandfrei.
Wenn ich jedoch direkt in der Prozedur parse_xml() mit dem sonst einwandfrei interpretierten
XML-String aufrufe entsteht ein Fehler bzw. das Programm stockt.
Der Fehler tritt auch auf, wenn ich z.B. nicht prase_xml(str_datastring) verwende, sondern ein ganz simples parse_xml('<
xml><test>ladsfl</test></
xml>'), welches ja bei der interpretierung keinerlei Zicken machen dürfte, bzw. bei der manuellen interpretation auch einwandfrei durchläuft.
Zunächst einmal meine Funktion parse_xml():
Delphi-Quellcode:
function parse_xml(xmlstring_f:
string):
string;
var
xml:IXMLDocument;
node: IXMLNode;
begin
xml := TXMLDocument.Create(
nil);
log('
Parsing:Starting');
xml.XML.Text := xmlstring_f;
//bis hier läuft die Funktion
xml.Active := True;
//Alles zwischen <xml und </xml> zuweisen
node :=
xml.DocumentElement;
log('
Parsing:Finished');
end;
Wie man sieht is die Funktion noch recht simpel, es tritt hier jedoch bereits bei
xml.Active := true ein fehler auf, jecoch nur(!!!) wenn die Funktion parse_xml() in der oben geposteten Methode aufgerufen wird, sonst läuft sie Einwandfrei durch (bei genau gleichem
xml-code)
Leute ich weiß einfach nicht mehr weiter, helft mir bitte!