Delphi使用IXMLDOMDocument和IXMLDomNode从XML结构中读取参数;
我有一个xml文件:Delphi使用IXMLDOMDocument和IXMLDomNode从XML结构中读取参数;,xml,delphi,parsing,Xml,Delphi,Parsing,我有一个xml文件: <?xml version='1.0'?> <methodResponse> <params> <param> <value><struct> <member> <name>status</name>
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value><struct>
<member>
<name>status</name>
<value><int>1</int></value>
</member>
<member>
<name>msg</name>
<value><string>Operazione completata correttamente</string></value>
</member>
<member>
<name>valres</name>
<value><struct>
<member>
<name>coderr</name>
<value><int>0</int></value>
</member>
<member>
<name>deserr</name>
<value><string>ricezione di UpdateDevice avvenuta correttamente</string></value>
</member>
<member>
<name>pairingip</name>
<value><string>192.168.1.15</string></value>
</member>
<member>
<name>pairingdevtype</name>
<value><int>3</int></value>
</member>
</struct></value>
</member>
<member>
<name>svrvers</name>
<value><string></string></value>
</member>
</struct></value>
</param>
</params>
</methodResponse>
地位
1.
味精
科雷塔门特歌剧院
勇气
coderr
0
应得者
科雷塔门特更新设备
派林基普
192.168.1.15
pairingdevtype
3.
服务器
但我无法读取pairingip和pairingdevtype(如果存在)。我怎么做
我试着这样做:
procedure TForm1.ParseResult(ResultString : string);
var
xml: IXMLDOMDocument;
node: IXMLDomNode;
nodes_row, nodes_se: IXMLDomNodeList;
i, j: Integer;
url: string;
begin
xml := CreateOleObject('Microsoft.XMLDOM') as IXMLDOMDocument;
xml.async := False;
xml.loadXML(Resultstring); // or use loadXML to load XML
if xml.parseError.errorCode <> 0 then
raise Exception.Create('XML Load error:' + xml.parseError.reason);
Node := xml.selectSingleNode('//methodResponse/params/param');
if (Node<>nil) then exit;
nodes_row := xml.selectNodes('//methodResponse/params/param');
for i := 0 to nodes_row.length - 1 do
begin
node := nodes_row.item[i];
Memo2.Lines.Add('res=' + node.text);
end;
end;
procedure TForm1.ParseResult(ResultString:string);
变量
xml:IXMLDOMDocument;
节点:IXMLDomNode;
nodes_行,nodes_se:IXMLDomNodeList;
i、 j:整数;
url:string;
开始
xml:=CreateOleObject('Microsoft.XMLDOM')作为IXMLDOMDocument;
xml.async:=False;
loadXML(Resultstring);//或者使用loadXML加载XML
如果xml.parseError.errorCode为0,则
引发异常.Create('XML加载错误:'+XML.parseError.reason);
Node:=xml.selectSingleNode('//methodResponse/params/param');
如果(Nodenil),则退出;
nodes_row:=xml.selectNodes('//methodResponse/params/param');
对于i:=0到节点\u行长度-1 do
开始
节点:=节点\行项目[i];
Memo2.Lines.Add('res='+node.text);
结束;
结束;
在这里,我可以在一行中获得param的所有内容,但我可以向下读取pairingip和pairingdevtype
请帮助我这里有一种方法可以做到这一点,因为您的XML清楚地表明,您要查找的两个值始终位于某个特定级别的某个位置:
procedure TForm1.Button1Click(Sender: TObject);
var
XMLDoc: IXMLDOMDocument;
Node, SibNode: IXMLDOMNode;
begin
Memo2.Lines.Clear; // Just for test output
XMLDoc := CoDOMDocument.Create;
XMLDoc.LoadXML(Memo1.Lines.Text); // XML added to Memo1.Lines
// Find the member/name node with the text 'pairingip'
Node := XMLDoc.selectSingleNode('//member/name[text()="pairingip"]');
if Assigned(Node) then
begin
SibNode := Node.nextSibling.firstChild; // Steps to the 'value/string' node
Memo2.Lines.Add('IP: ' + SibNode.Text);
end;
// Find the member/name node with the text 'pairingdevtype'
Node := XMLDoc.selectSingleNode('//member/name[text()="pairingdevtype"]');
if Assigned(Node) then
begin
SibNode := Node.nextSibling.firstChild; // Steps to the 'value/int' node
Memo2.Lines.Add('DevType: ' + SibNode.Text);
end;
end;
您的解决方案以何种方式不起作用?它无法读取pairingip和pairingipdevice的值