xml - 我需要帮助从 XML 读取状态字段

标签 xml delphi delphi-7

我需要使用 Delphi 7 读取此 XML 文本中的 status 字段。

此 XML 位于 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/>

到目前为止,我这样做没有任何结果,我什么也没得到:

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;

最佳答案

  1. 您的 xml 无效。缺少结束标记( </license></licensecloud> )。有效的 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>
    
  2. 主节点是<licensecloud>MainNode.ChildNodes['licensecloud']是不正确的。正确代码:

    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;
    

关于xml - 我需要帮助从 XML 读取状态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51689666/

相关文章:

java - 是否可以使用 ant 覆盖 xml 文件中的属性?

xml - 所有 XML 文本的 TrimSpaces

delphi - 这个无效指针在哪里?

delphi - 如何在 Delphi 中获得静态(类)字段的等效项?

sql - 确定遍历一个表并更新另一个表的最佳方法

c# - 将 XML 解析列表从 Controller 传递到 ASP.NET MVC 中的 View

html - 使用 XML/XSL 解析器定义 CSS 样式

c++ - 如何正确传递 C/C++ *(PUCHAR)(..)?

windows - 如何停止在任务栏上显示我的应用程序?

Delphi 7 tguid 比较