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)
根据您的 Delphi SKU,如果 Delphi 组件附带 XMLMapper 实用程序(位于 Delphi 的 Bin 目录中),您可以非常轻松地使用 Delphi 组件来完成此操作。
创建一个新项目,其中包含
将数据源连接到CDS,将网格连接到数据源;
将 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 映射器中:
选择“转换”窗格的“节点属性”选项卡。
在“文档”窗格的“文档视图”选项卡中,单击数据节点之一 -
然后,您可以在“节点属性”选项卡上设置其数据类型和最大长度。
| 归档时间: |
|
| 查看次数: |
6096 次 |
| 最近记录: |