Einzelnen Beitrag anzeigen

meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#1

Problem mit HTTP-Server und XML-Parsing

  Alt 13. Okt 2007, 17:45
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!
  Mit Zitat antworten Zitat