I need to read the status
field in this XML text, using Delphi 7.
This XML is inside a TMemo
:
<?xml version="1.0" encoding="UTF-8"?>
<licensecloud>
<request_id>665675780</request_id>
<request_timestamp>8/4/2018 15:47:44</request_timestamp>
<request_status>OK</request_status>
<error_num>0</error_num>
<error_msg></error_msg>
<error_desc></error_desc>
<license>
<key>a6gdfg567c79afd429d872d</key>
<dashed>A6589-dfg46D429-D872D</dashed>
<status>ACTIVE</status>
<trial>no</trial>
<expires/>
So far, I'm doing this with no result, I'm not getting anything:
Uses XMLDoc, XMLIntf;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
XmlFile : TXMLDocument;
Doc: IXMLDocument;
MainNode, CustomerNode : IXMLNode;
i : Integer;
XMLPath : string;
begin
Doc := LoadXMLData(Memo1.Text);
try
// XmlFile.LoadFromFile(XMLPath);
Doc.Active := True;
MainNode := Doc.DocumentElement;
for i:=0 to MainNode.ChildNodes['licensecloud'].ChildNodes.Count-1 do
begin
CustomerNode := MainNode.ChildNodes['licensecloud'].ChildNodes[i];
//Here you can get any imformation
ShowMessage(CustomerNode.ChildNodes['status'].Text);
//ShowMessage(CustomerNode.ChildNodes['address_line_1'].Text);
end;
finally
FreeAndNil(XmlFile);
end;
end;
Your xml is invalid. There are missing end tags (</license>
and </licensecloud>
). Valid xml:
<?xml version="1.0" encoding="UTF-8"?>
<licensecloud>
<request_id>665675780</request_id>
<request_timestamp>8/4/2018 15:47:44</request_timestamp>
<request_status>OK</request_status>
<error_num>0</error_num>
<error_msg></error_msg>
<error_desc></error_desc>
<license>
<key>a6gdfg567c79afd429d872d</key>
<dashed>A6589-dfg46D429-D872D</dashed>
<status>ACTIVE</status>
</license>
<trial>no</trial>
<expires/>
</licensecloud>
MainNode is <licensecloud>
. MainNode.ChildNodes['licensecloud']
is incorrect. Correct code:
procedure TForm1.Button1Click(Sender: TObject);
var
XmlFile : TXMLDocument;
Doc: IXMLDocument;
MainNode, CustomerNode : IXMLNode;
i : Integer;
XMLPath : string;
begin
Doc := LoadXMLData(Memo1.Text);
try
// XmlFile.LoadFromFile(XMLPath);
Doc.Active := True;
MainNode := Doc.DocumentElement;
ShowMessage(MainNode.ChildNodes['license'].ChildNodes['status'].Text);
finally
FreeAndNil(XmlFile);
end;
end;