![]() |
XML auslesen
Hallo,
ich habe eine XMl Datei, die folgendermaßen aussieht.
XML-Code:
Wie kann ich nun Prgname auslesen?
<?xml version="1.0" encoding="ISO-8859-1"?>
<note> <app>Prgname</app> </note>
Delphi-Quellcode:
function GetPrgName() : String;
begin // Was müsste hier rein? end; MFG Christian18 |
Re: XML auslesen
Welche Delphi Version hast du denn?
Bei Turbo Delphi gibt's unter Datei->Neu->Weitere unter Delphi-Projekte->XML die XML-Datenbindung, die aus einem XML-Dokument automatisch ein Interface generiert. |
Re: XML auslesen
Hallo,
ich verwende Delphi 7 Prof. LG Chris |
Re: XML auslesen
|
Re: XML auslesen
Hallo,
ich bins mal wieder. Wie kann man Attribute eines Knoten auslesen? Lg Chris |
Re: XML auslesen
Was nutzt du denn zum auslesen? MSXML? ThaXML? OpenXML?
|
Re: XML auslesen
Hallo,
noch gar nicht, weil ich nicht weiß wie ich das machen soll. Ich habe echt keine ahnung wie ich das XML Dokument auslesen soll. Hat du ein Beispiel??? Ich weiß nur, dass ich es über die XML Komponente von delphi machen soll. LG Chris |
Re: XML auslesen
Hallo,
hier nochmal mein Code, den ich bis jetzt habe.
Delphi-Quellcode:
Und hier mein XmlFile:
procedure TForm1.Button1Click(Sender: TObject);
var Xml : TXMLDocument; XmlFile : String; begin Xml:=TXMLDocument.Create(self); try XmlFile:='c:\XmlFile.xml'; if FileExists(XmlFile) then begin Xml.FileName:=XmlFile; Xml.Active:=True; end else begin MessageDlg('Die XmlFile konnte nicht gefunden werden.', mtError, [mbOK], 0); end; finally Xml.Free; end; end;
XML-Code:
Diese XmlFile müsste ich irgendwie auslesen und in einem Record speichern. Könnt ihr mir ein paar Tips geben?
<?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> LG Chris |
Re: XML auslesen
Hab mich letztens erst selbst um sowas kümmern müssen und ich kann nur sagen ich finde SimpleXML am besten.
XML-Code:
Das wäre dann etwa so zu lösen:
<xml version="1.0" encoding="ISO-8859-1"?>
<note> <app>Prgname</app> </note>
Delphi-Quellcode:
uses [...], SimpleXML;
[...] function ReadXML(S: String): String; var Doc: IXMLDocument; Element: IXMLNode; begin Doc := CreateXmlDocument; Doc.Load(S); Element := Doc.DocumentElement.SelectSingleNode('app'); Result := Element.Text; end; |
Re: XML auslesen
ich solles aber leider über die Delphi Komponente machen!!!
|
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 08:20 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