![]() |
Problem beim Auslesen einer XML Datei
hallo alle zusammen
ich möchte die Virtualtreeview in eine XML Datei speichern/Laden das mit dem speichern klappt auch (I think) doch mit dem laden der XML Datei komme ich einfach nicht weiter. ich benutze die open source ![]() ![]() vielleicht hat einer von euch ne lösung? thanks in advance!!!
Delphi-Quellcode:
function TMain_Form.Save_File(FileName : String) : Boolean;
var pNode : PVirtualNode; Data : PNodeData; XML : TNativeXml; iNode : TXmlNode; procedure ProcessTreeItem(pNode : PVirtualNode; iNode : TXmlNode); var cNode : TXmlNode; begin if (pNode = nil) then exit; Data:= VT.GetNodeData(pNode); cNode:= iNode.NodeNew('Item'); cNode.AttributeAdd('Title', Data^.Title); cNode.AttributeAdd('Value', Data^.Value); pNode:= pNode.FirstChild; while pNode <> Nil do begin ProcessTreeItem(pNode, cNode); pNode := pNode.NextSibling; end; end; begin XML:= TNativeXml.CreateName('password manager'); XML.Declaration.Encoding:= 'UTF-16'; XML.ExternalEncoding:= seUTF16LE; XML.XmlFormat:= xfReadable; iNode:= XML.Root.NodeNew('preset'); try pNode:= VT.GetFirst(); while pNode<>Nil do begin ProcessTreeItem(pNode, iNode); pNode:= pNode.NextSibling; end; XML.SaveToFile(FileName); if (Assigned(XML)) then FreeAndNil(XML); Result:= True; except on E: Exception do begin if (Assigned(XML)) then FreeAndNil(XML); end; end; end;
Code:
<?xml version="1.0" encoding="utf-16"?>
<password manager> <preset> <Item Title="Test 1" Value=""> <Item Title="Test 2" Value="Value 2"/> <Item Title="Test 3" Value="Value 3"/> </Item> </preset> </password Manager> |
AW: Problem beim Auslesen einer XML Datei
Wie wäre es, wenn Du den Code mal posten würdest, also der, mit dem Du Probleme hast?
|
AW: Problem beim Auslesen einer XML Datei
Ich glaube er hat keinen, seine Frage ist eher
Wobei ich das Problem auch nicht ganz verstehe: Ist es nicht egal, welche XML-Library du nimmst? Du kannst doch einfach die Standardlib (bis XE6 war es noch MS-XML) nehmen und den verlinkten Code kopieren? |
AW: Problem beim Auslesen einer XML Datei
Zitat:
|
AW: Problem beim Auslesen einer XML Datei
Zitat:
|
AW: Problem beim Auslesen einer XML Datei
Zitat:
Delphi-Quellcode:
:gruebel:
var
XMLDoc: TNativeXML; begin XMLDoc := TNativeXML.Create(Nil); XMLDoc.LoadFromFile(FileName); Zitat:
Zitat:
Bei mir benötigt eine 5,6 MB große Datei beim Öffnen mit NativeXML 1700 ms. Wenn ich MSXML verwende sind es knapp 600 ms. Am schnellsten ist bei mir OXml aber das spielt ja hier keine Rolle :-) Grüße Headbucket Ergänzung: NativeXML scheint einen Vorteil beim Lesen kleiner Dateien zu bringen. Wenn ich 1000 5 KB große Dateien einlese, bringt NativeXML einen Geschwindigkeitsvorteil von 60 ms... . Beim Schreiben ists dann wieder langsamer... . |
AW: Problem beim Auslesen einer XML Datei
Cool, gut zu wissen.
|
AW: Problem beim Auslesen einer XML Datei
Hey
entschuldigung dass ich mich nicht deutlich gemacht hatte! ich benutze die NativeXML-Library schon seit einiger zeit, dennoch ist es für mich das erste mal das ich die Library in einem loop verwende. in dem demo code hat er eine funktion die in der NativeXML so nicht existiert oder wird anders benutzt!? und zwar vor dem loop wird die funktion
Delphi-Quellcode:
aufgerufen.
Node.ChildNodes.First;
anyways das ist mein versuch den code anzupassen. Ps. wie schon gesagt wenn jemand eine bessere lösung hat....
Delphi-Quellcode:
function TMain_Form.Load_File(FileName : String) : Boolean;
var pNode : PVirtualNode; Data : PNodeData; XML : TNativeXml; iNode : TXmlNode; procedure ProcessNode(pNode : PVirtualNode; iNode : TXmlNode); var cNode : TXmlNode; begin if iNode = nil then exit; with iNode do begin Data:= VT.GetNodeData(pNode); pNode:= VT.AddChild(pNode); // Data^.Title:= iNode end; (* Original cNode := Node.ChildNodes.First; *) cNode:= iNode.; // <------------------- problem? while cNode <> nil do begin ProcessNode(pNode, cNode); cNode:= cNode.NextSibling(cNode) end; end; begin VT.Clear; try XML:= TNativeXml.CreateName('password manager'); XML.LoadFromFile(Filename); except on E: Exception do begin if (Assigned(XML)) then FreeAndNil(XML); Exit; end; end; try (* Original iNode := XMLDoc.DocumentElement.ChildNodes.First; *) iNode:= XML.RootNodes.FindFirst; while iNode<>nil do begin ProcessNode(nil, iNode); iNode:= iNode.NextSibling(iNode); end; if (Assigned(XML)) then FreeAndNil(XML); Result:= True; except on E: Exception do begin if (Assigned(XML)) then FreeAndNil(XML); end; end; end; |
AW: Problem beim Auslesen einer XML Datei
Wie wäre es, wenn Du das nimmst, was (fast) alle anderen verwenden, also einen Standard? Nur mal so nebenbei. Dann würden nämlich die Beispiele im Netz auch funktionieren.
So, und bei deiner Library ist ein PDF dabei, und Beispiele. Irgendwo wird da wohl stehen, wie man durch eine Node-Collection iteriert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz