Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   SOAP Message wie ein XML auslesen? (https://www.delphipraxis.net/193165-soap-message-wie-ein-xml-auslesen.html)

Byteteufel 28. Jun 2017 21:02

SOAP Message wie ein XML auslesen?
 
Hallo zusammen,

ich habe eine SOPA-Message und will diese entsprechend analysieren.

Code:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Body><KeyNewRequest xmlns="http://tempuri.org/"><KeyNewRequest><GUID>EF629EB757764FBC9EA41E0611093B32</GUID><RequestNumber>BEST1001</RequestNumber><KeyOwner>AB100</KeyOwner></KeyNewRequest></KeyNewRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>

ich möchte auslesen, welcher Service aufgrufen wird: <KeyNewRequest xmlns="http://tempuri.org/"> hier als "KeyNewRequest"
und den Wert aus <RequestNumber>BEST1001</RequestNumber> also RequestNumber liefert BEST1001

Ich dachte mit TXMLDocument weiter kommen zu können. Leider aber nein...

Wie kann ich an diese oder andere Werte kommen?

Vielen Dank

Axel

hoika 29. Jun 2017 07:21

AW: SOAP Message wie ein XML auslesen?
 
Hallo,
Zitat:

Ich dachte mit TXMLDocument weiter kommen zu können. Leider aber nein...
Warum nicht, was fehlt denn?
Zur Not hängst du den fehlenden Vorspann (?) vor dem Öffnen selber dran.

samso 29. Jun 2017 07:27

AW: SOAP Message wie ein XML auslesen?
 
Wo genau ist das Problem? Mein gerade hingeschmiertes Testprogram funktioniert:
Delphi-Quellcode:
uses
  Xml.XMLIntf, Xml.XMLDoc;

const
  SoapMessage = '<?xml version="1.0"?>' +
  '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' +
  'xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
  '<SOAP-ENV:Body><KeyNewRequest xmlns="http://tempuri.org/">' +
  '<KeyNewRequest><GUID>EF629EB757764FBC9EA41E0611093B32</GUID>' +
  '<RequestNumber>BEST1001</RequestNumber><KeyOwner>AB100</KeyOwner>' +
  '</KeyNewRequest></KeyNewRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>';

procedure TForm1.Button1Click(Sender: TObject);
var
  SoapDoc: IXMLDocument;
  Node: IXMLNode;
  NodeList: IXMLNodeList;
  a: String;
begin
  Memo1.Clear;
  SoapDoc := LoadXMLData(SoapMessage);
  Node := SoapDoc.DocumentElement;
  if Node<>nil
  then begin
    NodeList := Node.ChildNodes;
    if (NodeList<>nil) and (NodeList.Count=1)
    then begin
      Node := NodeList[0];
      NodeList := Node.ChildNodes;
      if (NodeList<>nil) and (NodeList.Count=1)
      then begin
        Node := NodeList[0];
        a := Node.Attributes['xmlns'];
        Memo1.Lines.Add(Node.LocalName + '=' + a);
        NodeList := Node.ChildNodes;
        if (NodeList<>nil) and (NodeList.Count=1)
        then begin
          NodeList := NodeList[0].ChildNodes;
          Node := NodeList.FindNode('RequestNumber');
          if Node<>nil
          then
            Memo1.Lines.Add(Node.LocalName + '=' + Node.Text);
        end;
      end;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz