首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi用IXMLDOMDocument和IXMLDomNode从结构中读取参数;

Delphi用IXMLDOMDocument和IXMLDomNode从结构中读取参数;
EN

Stack Overflow用户
提问于 2014-02-18 10:30:52
回答 1查看 2.7K关注 0票数 0

我有一个xml文件:

代码语言:javascript
复制
<?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>

但如果有的话,我就看不懂成对和对字了。我该怎么做呢?

我试过:

代码语言:javascript
复制
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;

在这篇文章中,我可以在一行中获得param的所有内容,但是我可以继续阅读pairingip和pairingdevtype。

请帮帮我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-18 15:28:39

这里有一种方法,正如您的XML清楚地表明,您要寻找的两个值总是在某个特定级别上的某个位置:

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21850958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档