Niedawno zacząłem używać OmniXML przede wszystkim dlatego, że można go używać zarówno w Delphi, jak iw Lazarusie.Jak przekonwertować kod między OmniXML i biblioteką XML Delphi?
Sam jestem początkujący, jeśli chodzi o XML, i to jest miejsce, w którym mam nadzieję, że mogę się czegoś nauczyć lub unikać robienia złych rzeczy, które już mogę robić.
Do tego mam zamiar użyć innego Mam pytanie jako punkt odniesienia: Saving and Loading Treeview using XML
w jednej z odpowiedzi przez bummi, myślę, że jest on za pomocą standardowego języka XML w Delphi gdzie używam OmniXML w Łazarza, więc kod, który zamieścił w swojej odpowiedzi, nie skompilowałby się. Mam to działa teraz po zmianie niektórych kodu, ale muszę wiedzieć, czy następuje to poprawne:
(1) Typy zmiennych
Delphi
TTreeToXML = Class
private
FDOC: TXMLDocument;
FRootNode: IXMLNode;
OmniXML
TTreeToXML = Class
private
FDOC: IXMLDocument;
FRootNode: IXMLElement;
(2) Tworzenie dokumentu XML
Delphi
FDOC := TXMLDocument.Create(nil);
OmniXML
FDOC := CreateXMLDoc;
(3) Uwolnienie dokumentu XML
Delphi
if Assigned(FDOC) then
FDOC.Free;
OmniXML
nie widzę sposobu na uwolnienie dokumentu?
(4) Cechy
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) Opcje
Delphi
FDOC.Options := FDOC.Options + [doNodeAutoIndent];
OmniXML
dokument jest automatycznie zapisywany z myślnikiem, nie mogę znaleźć żadnych opcji?
(6) Aktywny
Delphi
FDOC.Active := true;
OmniXML
widzę żadnej możliwości ustawiania taką właściwość, aby Prawda czy fałsz?
(7) Kodowanie
Delphi
FDOC.Encoding := 'UTF-8';
OmniXML
Ponownie patrz takiej możliwości?
Więc w zasadzie myślę, że chciałbym wiedzieć, jakie są różnice między XML Delphi i wdrożeń OmniXML.
Czy zmiany dokonałem we właściwy sposób, czy nie?
Właściwości, których nie mogę znaleźć, takie jak Opcje i Kodowanie, w jaki sposób mogę to zaimplementować w OmniXML?
Dzięki.
Nie nazwałbym standardu "MSXML", ani nie jest to własność Delphi. To własne API Window/Microsoft. Opakowania dla bibliotek DLL XML MS Windows są zawarte w pudełku, ale byłoby jasne, że wystarczy powiedzieć "przekonwertuj na interfejs MSXML API". –
@WarrenP Widzę twoją sprawę, ale myślę, że odniosłem się do niej jako do Delphi po prostu dlatego, że jednostki pochodzą z Delphi w standardzie, a w Łazarzu nie. –