解析xml文件Delphi

Sha*_*pie 2 xml delphi delphi-xe2

首先,我是编码和Delphi的新手,几个月来一直在使用它.

下面是一个示例xml文件.

我想要实现的是解析.xml文件的每个'Name'部分中的所有数据.

我以前从未这样做过.一些指导意见将不胜感激.我在这里看到了类似的其他问题,但我不能完全掌握它.

我没有代码示例提供....这是我的困难,我不知道从哪里开始.

<ds>
<Customers>
<Name>
<address_name>test 1</address_name> 
<address_line_1>test 1</address_line_1> 
<address_line_2>test 1</address_line_2> 
<address_line_3>test 1</address_line_3>
<postcode>test 1</postcode> 
<tel_no>test 1</tel_no> 
<fax_no>test 1</fax_no> 
<email_address>test 1<email_address/> 
<website>test 1<website /> 
</Name>
<Name>
<address_name>test 2</address_name> 
<address_line_1>test 2</address_line_1> 
<address_line_2>test 2</address_line_2> 
<address_line_3>test 2</address_line_3>
<postcode>test 2</postcode> 
<tel_no>test 2</tel_no> 
<fax_no>test 2</fax_no> 
<email_address>test 2<email_address/> 
<website>test 2<website /> 
</Name>
<Name>
<address_name>test 3</address_name> 
<address_line_1>test 3</address_line_1> 
<address_line_2>test 3</address_line_2> 
<address_line_3>test 3</address_line_3>
<postcode>test 3</postcode> 
<tel_no>test 3</tel_no> 
<fax_no>test 3</fax_no> 
<email_address>test 3<email_address/> 
<website>test 3<website /> 
</Name>
<Customers>
</ds>
Run Code Online (Sandbox Code Playgroud)

谢谢,

小智 7

对xml文件更好的方法是:

<ds>
    <Customers>
        <Customer>
            <address_name>test 1</address_name> 
            <address_line_1>test 1</address_line_1> 
            <address_line_2>test 1</address_line_2> 
            <address_line_3>test 1</address_line_3>
            <postcode>test 1</postcode> 
            <tel_no>test 1</tel_no> 
            <fax_no>test 1</fax_no> 
            <email_address>test 1</email_address> 
            <website>test 1</website> 
        </Customer>
        <Customer>
            <address_name>test 2</address_name> 
            <address_line_1>test 2</address_line_1> 
            <address_line_2>test 2</address_line_2> 
            <address_line_3>test 2</address_line_3>
            <postcode>test 2</postcode> 
            <tel_no>test 2</tel_no> 
            <fax_no>test 2</fax_no> 
            <email_address>test 2</email_address> 
            <website>test 2</website> 
        </Customer>
        <Customer>
            <address_name>test 3</address_name> 
            <address_line_1>test 3</address_line_1> 
            <address_line_2>test 3</address_line_2> 
            <address_line_3>test 3</address_line_3>
            <postcode>test 3</postcode> 
            <tel_no>test 3</tel_no> 
            <fax_no>test 3</fax_no> 
            <email_address>test 3</email_address> 
            <website>test 3</website> 
        </Customer>
    </Customers>
</ds>
Run Code Online (Sandbox Code Playgroud)

要阅读此文件:

插入这两个用途: XMLDoc,XMLIntf ;

这是一个读取XML文件的过程.

procedure TForm1.btnReadXmlFileClick(Sender: TObject);
var
  XmlFile : TXMLDocument;
  MainNode, CustomerNode : IXMLNode;
  i : Integer;
  XMLPath : string;
begin
  XMLPath := 'Z:\Temp\xmlToRead.xml'; //example of path
  XmlFile :=  TXMLDocument.Create(Application);
  try
    XmlFile.LoadFromFile(XMLPath);
    XmlFile.Active := True;
    MainNode := XmlFile.DocumentElement;

    for i:=0 to MainNode.ChildNodes['Customers'].ChildNodes.Count-1 do
    begin
      CustomerNode := MainNode.ChildNodes['Customers'].ChildNodes[i];
      //Here you can get any imformation
      ShowMessage(CustomerNode.ChildNodes['address_name'].Text);
      ShowMessage(CustomerNode.ChildNodes['address_line_1'].Text);
    end;
  finally
    FreeAndNil(XmlFile);
  end;
end;
Run Code Online (Sandbox Code Playgroud)


Mar*_*ynA 5

根据您的 Delphi SKU,如果 Delphi 组件附带 XMLMapper 实用程序(位于 Delphi 的 Bin 目录中),您可以非常轻松地使用 Delphi 组件来完成此操作。

创建一个新项目,其中包含

  • TClient数据集
  • 一个TDatasource
  • TDbGrid

将数据源连接到CDS,将网格连接到数据源;

  • 添加 XMLTransformerProvider

将 CDS 的 ProviderName 设置为 XMLTransformerProvider 的名称

在 FormCreate 事件中,打开 CDS。

保存项目。

然后,按照我在评论中提到的更正 XML 文件后,将其加载到 Delphi 的 XMLMapper 中。

在 XML 映射器中,

  • 选择左侧文档窗格的文档视图选项卡

  • 依次双击每个节点address_name..网站

  • 单击创建 | 菜单中来自 XML 的数据包

  • 单击中央转换窗格的映射选项卡上的创建和测试转换按钮。

  • 从菜单中,转到文件 | 保存 | 转换并保存您的 .Xtr 文件。

回到您的 Delphi 项目,将 XMLTransformProvider 的 XMLDataFile 属性指向您的 XML 文件,并将其 TransformRead zub 组件的 TransformationFile 指向您的 .Xtr 文件。

编译并运行您的项目。

CDS 中创建的 TField 的类型和大小由 XMLMapper 生成的 .Xtr 文件确定。您可以按如下方式微调这些:

在 XML 映射器中:

  • 选择“转换”窗格的“节点属性”选项卡。

  • “文档”窗格的“文档视图”选项卡中,单击数据节点之一 -

  • 然后,您可以在“节点属性”选项卡上设置其数据类型最大长度