【发布时间】:2008-11-04 20:57:04
【问题描述】:
我打算为应用程序添加 XML 支持,但我不熟悉 Delphi 中的 XML 编程。 基本上我需要基于 XML 节点创建对象,并基于对象生成 XML 文件。
我应该使用哪个 XML 组件库? Delphi 有什么好的 XML 教程吗?
【问题讨论】:
-
见 stackoverflow stackoverflow.com/questions/1535143/…
我打算为应用程序添加 XML 支持,但我不熟悉 Delphi 中的 XML 编程。 基本上我需要基于 XML 节点创建对象,并基于对象生成 XML 文件。
我应该使用哪个 XML 组件库? Delphi 有什么好的 XML 教程吗?
【问题讨论】:
您可以从查看 Delphi 的 TXMLDocument 组件开始。这将为您提供使用 XML/DOM 的基础知识。它很简单,可以通过将其拖放到您的表单中来添加。它具有 LoadFromFile 和 SaveToFile 方法,易于导航。
但是,在某些时候,您会耗尽 TXMLDocument 的功能,尤其是如果您想使用 XPath 之类的东西。
我建议您查看 IXMLDOMDocument2,它是 MSXML2_TLB 的一部分,例如
XML := CreateOleObject('MSXML2.DOMDocument.3.0') as IXMLDOMDocument2;
XML.async := false;
XML.SetProperty('SelectionLanguage','XPath');
您需要将 msxmldom、xmldom、XMLIntf、XMLDoc 和 MSXML2_TLB 添加到您的使用部分。
那里有一些组件库,但我建议编写自己的帮助类或函数。这是我们编写和使用的示例:
function XMLCreateRoot(var xml: IXMLDOMDocument2; RootName: string; xsl: string = ''; encoding: string = 'ISO-8859-1'; language: string = 'XPath'): IXMLDOMNode;
var
NewPI: IXMLDOMProcessingInstruction;
begin
if language<>'' then
xml.SetProperty('SelectionLanguage','XPath');
if encoding<>'' then begin
NewPI:=xml.createProcessingInstruction('xml', 'version="1.0" encoding="'+encoding+'"');
xml.appendChild(NewPI);
end;
if xsl<>'' then begin
NewPI:=xml.createProcessingInstruction('xml-stylesheet','type="text/xsl" href="'+xsl+'"');
xml.appendChild(NewPI)
end;
xml.async := false;
xml.documentElement:=xml.createElement(RootName);
Result:=xml.documentElement;
end;
从那里拿走。
【讨论】:
我使用来自 simdesign 的nativeXML。它消除了使用 XML 的所有痛苦,您将在几分钟内启动并运行。
【讨论】:
这里有几个教程:
此外,您可能想查看XMLIntf unit(尽管此链接的 Delphi Wikia 页面内容非常简单)。
【讨论】:
您可以尝试以下书籍: Delphi Developers Guide to XML
基本上我会推荐你使用微软的 DOM。您需要像导入任何其他 COM 对象一样导入该库。
【讨论】:
您可以使用Delphi的XML Data Binding(文件-新建-其他-XML映射(我不知道确切的路径,我在家没有Delphi)。
它通过 XML 提供程序创建对象/接口,因此您可以使用对象/结构而不是纯 xml 文本文件。
您不必费力地阅读和编写每个 XML 元素 - 您只是在处理对象及其属性的集合。
【讨论】:
我已经使用 nativeXML 大约一年了。我的需求相当简单。对我来说,XML 流畅性只是大型应用程序的一小部分,但我能够以几乎与编写代码一样快的速度实现我需要的部分,在线帮助很好,我的需求在一天而不是一周内得到了满足或更长。我赞同 davehay 对 nativeXML 的投票。
【讨论】: