这是一个XML字符串具有信息。
<?xml version="1.0" encoding="UTF-8"?>
<string xmlns="http://tempuri.org/">
<statusInfo><vendorClaimID>BRADY12478018AETNA</vendorClaimID>
<statusID>0</statusID><statusDescription>Unvalidated</statusDescription>
</statusInfo></string>
但是,这是怎么弄的。你将不得不滚动到看到所有的权利。
'<?xml version="1.0" encoding="utf-8"?>'#$D#$A'<string xmlns="http://tempuri.org/"><statusInfo><vendorClaimID>BRADY12478018AETNA</vendorClaimID><statusID>0</statusID><statusDescription>Unvalidated</statusDescription></statusInfo></string>'
我已经装了串入一个xmlDoc中,但不知道如何从这里轻松地访问这些值..
var
doc: IXMLDocument;
doc := LoadXMLData(xmlString);
谢谢!
您可以使用XPath提取节点的值
检查此样本
{$APPTYPE CONSOLE}
{$R *.res}
uses
MSXML,
SysUtils,
ActiveX,
ComObj;
Const
XMLStr=
'<?xml version="1.0" encoding="UTF-8"?> '+
'<string xmlns="http://tempuri.org/">'+
' <statusInfo>'+
' <vendorClaimID>BRADY12478018AETNA</vendorClaimID> '+
' <statusID>0</statusID><statusDescription>Unvalidated</statusDescription> '+
' </statusInfo>'+
'</string> ';
procedure Test;
Var
XMLDOMDocument : IXMLDOMDocument;
XMLDOMNode : IXMLDOMNode;
begin
XMLDOMDocument:=CoDOMDocument.Create;
XMLDOMDocument.loadXML(XmlStr);
XMLDOMNode := XMLDOMDocument.selectSingleNode('//string/statusInfo/vendorClaimID');
if XMLDOMNode<>nil then
Writeln(Format('vendorClaimID %s',[String(XMLDOMNode.Text)]));
XMLDOMNode := XMLDOMDocument.selectSingleNode('//string/statusInfo/statusID');
if XMLDOMNode<>nil then
Writeln(Format('statusID %s',[String(XMLDOMNode.Text)]));
XMLDOMNode := XMLDOMDocument.selectSingleNode('//string/statusInfo/statusDescription');
if XMLDOMNode<>nil then
Writeln(Format('statusDescription %s',[String(XMLDOMNode.Text)]));
end;
begin
try
CoInitialize(nil);
try
Test;
finally
CoUninitialize;
end;
except
on E:EOleException do
Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
在XML中的每个节点将被表示为一个IXMLNode
在IXMLDocument
,它们出现在XML相同的层次结构。 这将有助于如果你第一次看到有齿痕,所以你可以更清楚地看到层次结构中的节点的XML:
<?xml version="1.0" encoding="UTF-8"?>
<string xmlns="http://tempuri.org/">
<statusInfo>
<vendorClaimID>BRADY12478018AETNA</vendorClaimID>
<statusID>0</statusID>
<statusDescription>Unvalidated</statusDescription>
</statusInfo>
</string>
一个你了解的层次,你可以为它编写代码:
var
doc: IXMLDocument;
statusInfo: IXMLNode;
vendorClaimID: String;
statusID: Integer;
statusDescription: String;
begin
doc := LoadXMLData(xmlString);
statusInfo := doc.DocumentElement.ChildNodes['statusInfo'];
vendorClaimID := statusInfo.ChildNodes['vendorClaimID'].Text;
statusID := StrToInt(statusInfo.ChildNodes['statusID'].Text);
statusDescription := statusInfo.ChildNodes['statusDescription'].Text;
end;
或者:
var
doc: IXMLDocument;
statusInfo: IXMLNode;
vendorClaimID: String;
statusID: Integer;
statusDescription: String;
begin
doc := LoadXMLData(xmlString);
statusInfo := doc.DocumentElement.ChildNodes['statusInfo'];
vendorClaimID := VarToStr(statusInfo.ChildValues['vendorClaimID']);
statusID := StrToInt(VarToStr(statusInfo.ChildValues['statusID']));
statusDescription := VarToStr(statusInfo.ChildValues['statusDescription']);
end;
如果你使用Delphi的XML数据绑定向导,它会生成将解析XML为你的接口:
var
doc: IXMLDocument;
statusInfo: IXMLstatusInfoType;
vendorClaimID: String;
statusID: Integer;
statusDescription: String;
begin
doc := LoadXMLData(xmlString);
statusInfo := Getstring(doc).statusInfo;
vendorClaimID := statusInfo.vendorClaimID;
statusID := statusInfo.statusID;
statusDescription := statusInfo.statusDescription;
end;