Ich habe OmniXML vor kurzem verwendet, weil es sowohl für Delphi als auch für Lazarus verwendet werden kann.Wie konvertiere ich Code zwischen OmniXML und Delphi eigenen XML-Bibliothek?
Ich selbst bin ein Anfänger, wenn es um XML geht, und hier hoffe ich, dass ich einige Dinge lernen oder vermeiden kann, irgendwelche schlechten Dinge zu tun, die ich vielleicht schon mache.
Dafür wird mir eine andere Frage, die ich als Referenz verwenden muß: Saving and Loading Treeview using XML
In eines der Antworten von bummi, ich glaube, er Standard-XML in Delphi verwendet, wo ich OmniXML in Lazarus verwenden, so Der Code, den er in seiner Antwort postete, würde nicht kompilieren. Ich habe es funktioniert jetzt, nachdem ein Teil des Codes zu ändern, aber ich muss wissen, ob die folgenden richtig ist:
(1) Variablentypen
Delphi
TTreeToXML = Class
private
FDOC: TXMLDocument;
FRootNode: IXMLNode;
OmniXML
TTreeToXML = Class
private
FDOC: IXMLDocument;
FRootNode: IXMLElement;
(2) Erstellen der XML-Dokument
Delphi
FDOC := TXMLDocument.Create(nil);
OmniXML
FDOC := CreateXMLDoc;
(3) Befreit das XML-Dokument
Delphi
if Assigned(FDOC) then
FDOC.Free;
OmniXML
Ich kann nicht sehen, wie man das Dokument zu befreien?
(4) Attributes
Delphi
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) Optionen
Delphi
FDOC.Options := FDOC.Options + [doNodeAutoIndent];
OmniXML
Das Dokument mit Einrückungen automatisch gespeichert wird, kann ich keine Optionen finden?
(6) Aktive
Delphi
FDOC.Active := true;
OmniXML
Ich sehe keine Möglichkeit, eine solche Eigenschaft der Einstellung auf Wahr oder Falsch?
(7) Encoding
Delphi
FDOC.Encoding := 'UTF-8';
OmniXML
Wieder sehe ich keine solche Option?
Also im Grunde ich denke, ich würde gerne wissen, was sind die Unterschiede zwischen dem Delphi XML und OmniXML Implementierungen.
Sind die Änderungen die richtige Vorgehensweise oder nicht?
Die Eigenschaften, die ich nicht finden kann, wie Optionen und Codierung, wie würde ich dies in OmniXML implementieren?
Danke.
Ich würde nicht "MSXML" Standard nennen, noch ist es Delphi's Own. Es ist Windows/Microsofts eigene API. Wrapper für die Windows-MS-XML-DLLs sind in der Box enthalten, aber es wäre klar, nur "Konvertieren in MSXML-API" zu sagen. –
@WarrenP Ich sehe Ihren Punkt, aber ich denke, ich habe es als Delphi's bezeichnet, einfach weil die Einheiten mit Delphi als Standard kommen und in Lazarus nicht. –