![]() |
Re: XML auslesen
Hm,
definiere mal bitte Delphi Komponente :-) |
Re: XML auslesen
Wie soll ich diese Definieren??? Die ist bei Delphi standart dabei. Also ab Version 7 glaube ich
|
Re: XML auslesen
Hallo Christian,
du benutzt bestimmt TXMLDocument aus der Palettenseite "Internet". Dein XML-Dokument ist nicht optimal aufgebaut, aber ich nehme an, dass es vorgegeben ist. Die Item-Elemente sind nicht geschlossen, wohl ein Fehler beim abtippen? Hier mein Ansatz unter Verwendung deines korrigierten XML-Dokument:
Delphi-Quellcode:
Besser wäre die Abbildung der Container-Hierarchie des Formulars, denn durch Gruppierung nach Klassen kannst du mit deinem XML-Dokument nur eindeutige Komponentennamen auflösen. Wäre die Abbildung vorhanden, dann könnte man Localize() zu einer rekursiven Funktion umgestalten und die ganze Form mit einem Aufruf lokalisieren.
procedure SetProperty(comp: TComponent; const propName: string; value: Variant);
var ppi: TypInfo.PPropInfo; begin ppi := GetPropInfo(comp, propName); if Assigned(ppi) then SetPropValue(comp, propName, value); end; procedure Localize(comp: TComponent; doc: IXMLDocument); var i: Integer; attr, elem, group: IXMLNode; groupName: string; begin groupName := Copy(comp.ClassName, 2, Maxint); group := doc.DocumentElement.ChildNodes[groupName]; if Assigned(group) then begin elem := group.ChildNodes[comp.Name]; if Assigned(elem) then for i := 0 to Pred(elem.AttributeNodes.Count) do begin attr := elem.AttributeNodes[i]; SetProperty(comp, attr.NodeName, attr.NodeValue); end; end; end; procedure TDemoForm.FormCreate(Sender: TObject); var doc: IXMLDocument; nl: IXMLNode; i: Integer; begin doc := LoadXMLData(Memo.Text); doc.Active := True; Localize(Button1, doc); // ... end; Grüße vom marabu |
Re: XML auslesen
Hallo,
nein die XmlFile habe ich selber gemacht. Da sind mir keine Grenzen gesetzt. Wie kann ich es denn Optimal aufbauen?
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Language> <Button> <Button1 Caption="Neu" Tag="1" /> <Button2 Caption="Bearbeiten" Tag="2" /> <Button3 Caption="Löschen" Tag="3" /> <Button4 Caption="Beenden" Tag="4" /> </Button> <DBGrid> <Item1 Caption="Kunden - ID" Tag="1"> <Item2 Caption="Vorname" Tag="2"> <Item3 Caption="Name" Tag="3"> </DBGrid> </Language> |
Re: XML auslesen
Einen Ansatz habe ich dir ja schon genannt:
Zitat:
Code:
Bei meinem Beispiel gehe ich davon aus, dass es für jede Sprache ein eigenes XML-Dokument gibt.
<Localization lang="DE">
<MainForm> <TopPanel> <NewButton Caption="&Neu"/> <DeleteButton Caption="&Löschen"/> </TopPanel> </MainForm> <NewDialog> </NewDialog> </Localization> Ein weiterer Ansatz wäre: Du schaust mal wie das existierende Lösungen machen und kupferst dort ein wenig ab. Freundliche Grüße |
Re: XML auslesen
Hallo,
irgendwie ist das alles noch nicht sowas wie ich suche. Die Funktion habe ich ja schon vorgegeben. Ich komme an der Stelle ja nicht weiter. Eure Funktion ist vieleicht schön. Aber sowas suche ich nicht. Ich habe versucht es in meiner zu übertragen aber klappt nicht. Was mache ich falsch?
Delphi-Quellcode:
Ich will das Attribut bei Caption einfach nur in einer String Variablen speichern.
var Xml : TXMLDocument;
Lang : IXMLNode; Main : IXMLNode; Labels : IXMLNodeList; begin Xml:=TXMLDocument.Create(nil); Xml.LoadFromFile('D:\Lang\Deu.lng'); Xml.Active:=True; Lang:=Xml.DocumentElement['Language']; Main:=Lang.ChildNodes['UMain']; Labels:=Lang.AttributeNodes['Label']; <?xml version="1.0" encoding="ISO-8859-1"?> <Language Lang="Deutsch"> <UMain> <Label Caption="Neu" Tag="1" /> </UMain> </Language> |
Re: XML auslesen
Zitat:
Delphi-Quellcode:
begin
// ... ShowMessage(Xml.DocumentElement .ChildNodes['UMain'] .ChildNodes['Label'] .AttributeNodes['Caption'].NodeValue ); // ... end; |
Re: XML auslesen
Zitat:
da kommt aber immer eine Fehlermeldung!!! Ungültige Zeigeroperation!
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var xml : TXMLDocument; begin xml:=TXMLDocument.Create(nil); xml.LoadFromFile('D:\Project\Lang\Deu.lng'); xml.Active:=True; ShowMessage(Xml.DocumentElement.ChildNodes['UMain'].ChildNodes['Label'].AttributeNodes['Caption'].NodeValue); end; |
Re: XML auslesen
Die Fehlermeldung rührt nicht von meiner Code-Zeile her. Sie sollte verschwinden, wenn du Application oder self als Owner an TXMLDocument.Create() übergibst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 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