Ich versuche, in Delphi xml wie folgt zu analysieren:Parse SOAP faultstring in Delphi
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>java.lang.ClassNotFoundException</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Delphi-Code:
program TestXML;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Xml.xmldom,
Xml.XMLIntf,
Xml.XMLDoc,
ActiveX;
var
XMLDoc: TXMLDocument;
Root,Body,Fault,Node: IXMLNode;
begin
CoInitialize(nil);
try
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.Options := XmlDoc.Options - [doNodeAutoCreate];
XMLDoc.LoadFromFile('test.xml');
Root := XMLDoc.DocumentElement;
Body := Root.ChildNodes['Body'];
Writeln(Body.NodeName);
Fault := Body.ChildNodes['Fault'];
Writeln(Fault.NodeName);
try
Node := Fault.ChildNodes['faultcode'];
Writeln(Node.Text);
except
on E:exception do Writeln(E.Message); // "Node "faultcode not found".
end;
finally
CoUnInitialize;
end;
end.
ich das Problem erraten ist: der übergeordnete Knoten "Störung" hat die Namensraum "http://schemas.xmlsoap.org/soap/envelope/" und hat das Präfix "soap", aber der Kindknoten "faultcode" hat keinen Namensraum und kein Präfix.
Wie ist es möglich eine Schnittstelle zum Knoten "faultcode" zu bekommen?
Vielen Dank.
'XMLDoc' sollte als' IXMLDocument' deklariert werden – kobik
Kobik, ich habe versucht, die Deklaration in IXMLDocument zu ändern, aber es erzeugt den gleichen Fehler. – shurets
versuchen Sie 'Root.ChildNodes.FindNode ('Fehlercode'). Text' – kobik