【发布时间】:2010-08-21 05:13:38
【问题描述】:
我需要使用此链接http://isbndb.com/api/books.xml?access_key=12345678&index1=isbn&value1=9780321635345 通过 XML 服务从 isbndb.com 获取图书信息。
任何想法如何在delphi中做到这一点?
【问题讨论】:
我需要使用此链接http://isbndb.com/api/books.xml?access_key=12345678&index1=isbn&value1=9780321635345 通过 XML 服务从 isbndb.com 获取图书信息。
任何想法如何在delphi中做到这一点?
【问题讨论】:
您需要一个 HTTP 客户端(比如说 Indy)和一个 XML 解析器。例如,对于 XML 解析器,只需使用 OmniXML。 Indy 包含在 Delphi7 中。然后写这样的代码:
procedure TForm1.Button1Click(Sender: TObject);
const
cURL = 'http://isbndb.com/api/books.xml?access_key=12345678&index1=isbn&value1=9780321635345';
var
HTTPClient: TIdHTTP;
XMLAsStream: TMemoryStream;
XMLDocument: IXMLDocument;
begin
HTTPClient := TIdHTTP.Create(nil);
try
XMLAsStream := TMemoryStream;
try
HTTPClient.Get(cURL, XMLAsStream);
XMLAsStream.Position := 0;
XMLDocument := CreateXMLDoc;
XMLDocument.LoadFromStream(XMLAsStream);
finally
XMLAsStream.Free;
end;
finally
HTTPClient.Free;
end;
end;
现在您的 XML 文档在内存中被解析为 DOM。就用它吧:)
【讨论】:
你有哪个 Delphi 7 版本?
Delphi 7 Feature Matrix 表示如果您有 Delphi 7 Enterprise 或 Architect,您可以使用内置的 XML 数据绑定向导围绕您的 XML 生成 Delphi 类。这些类是 XML DOM 的包装器。它们使使用 XML 变得更加容易。
请参阅this answer 和this video,了解如何使用 XML 数据绑定向导。
使用 Indy 就像提到的 Runner 一样,最容易获取 XML。
如果您有 Delphi 7 Standard 或 Professional,那么您没有 XML 数据绑定向导,因此您必须使用 XML DOM 解析 XML。
请注意,XML DOM 可以或多或少地覆盖standardized 级别 1、级别 2 或级别 2。
您的 XML 决定了您需要的级别。
我不完全确定 Delphi 7 Standard 和 Professional 是否包含 XML DOM,但 Delphi 7 有多种 XML DOM 可用。
很多人使用 MSXML DOM(它支持 Level 2 并且在大多数 Windows 系统上都可用,因为它包含在 Internet Explorer 和许多其他 Microsoft 软件中)。
一个开源实现 XML DOM 是 OmniXML(Runner 也指出了这一点;注意它只支持 Level 1)。
--杰罗恩
【讨论】: