我最近开始使用 OmniXML 主要是因为它可以用于 Delphi 和 Lazarus。
我自己是 XML 的初学者,我希望在这里我可以学到一些东西或避免做任何我可能已经在做的坏事。
为此,我将使用另一个问题作为参考:Saving and Loading Treeview using XML
在bummi的答案之一中,我认为他在 Delphi 中使用标准 XML,而我在 Lazarus 中使用 OmniXML,因此他在答案中发布的代码无法编译。在更改了一些代码后,我现在可以使用它,但我需要知道以下内容是否正确:
(1) 变量类型
德尔福
TTreeToXML = Class
private
FDOC: TXMLDocument;
FRootNode: IXMLNode;
OmniXML
TTreeToXML = Class
private
FDOC: IXMLDocument;
FRootNode: IXMLElement;
(2) 创建 XML 文档
德尔福
FDOC := TXMLDocument.Create(nil);
OmniXML
FDOC := CreateXMLDoc;
(3) 释放 XML 文档
德尔福
if Assigned(FDOC) then
FDOC.Free;
OmniXML
我看不到释放文档的方法?
(4) 属性
德尔福
Procedure TTreeToXML.WriteNode(N: TTreeNode; ParentXN: IXMLNode);
var
CurrNode: IXMLNode;
Child: TTreeNode;
begin
CurrNode := ParentXN.AddChild(N.Text);
CurrNode.Attributes['NodeLevel'] := N.Level;
CurrNode.Attributes['Index'] := N.Index;
Child := N.getFirstChild;
while Assigned(Child) do
begin
WriteNode(Child, CurrNode);
Child := Child.getNextSibling;
end;
end;
OmniXML
Procedure TTreeToXML.WriteNode(N: TTreeNode; ParentXN: IXMLNode);
var
CurrNode: IXMLNode;
Child: TTreeNode;
begin
CurrNode := ParentXN.AddChild(N.Text);
CurrNode.Attributes.SetValue('NodeLevel', IntToStr(N.Level));
CurrNode.Attributes.SetValue('NodeIndex', IntToStr(N.Index));
Child := N.getFirstChild;
while Assigned(Child) do
begin
WriteNode(Child, CurrNode);
Child := Child.getNextSibling;
end;
end;
(5) 选项
德尔福
FDOC.Options := FDOC.Options + [doNodeAutoIndent];
OmniXML
文档自动缩进保存,我找不到任何选项?
(6) 主动
德尔福
FDOC.Active := true;
OmniXML
我看不到将此类属性设置为 True 或 False 的方法吗?
(7) 编码
德尔福
FDOC.Encoding := 'UTF-8';
OmniXML
我再次看到没有这样的选择?
所以基本上我想我想知道 Delphi XML 和 OmniXML 实现之间有什么区别。
我所做的更改是否正确?
我找不到诸如选项和编码之类的属性,我将如何在 OmniXML 中实现它?
谢谢。