AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML auslesen

Ein Thema von Christian18 · begonnen am 3. Sep 2007 · letzter Beitrag vom 9. Sep 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#11

Re: XML auslesen

  Alt 8. Sep 2007, 00:13
Hm,

definiere mal bitte Delphi Komponente
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#12

Re: XML auslesen

  Alt 8. Sep 2007, 00:14
Wie soll ich diese Definieren??? Die ist bei Delphi standart dabei. Also ab Version 7 glaube ich
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: XML auslesen

  Alt 8. Sep 2007, 09:04
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:
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;
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.

Grüße vom marabu
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#14

Re: XML auslesen

  Alt 8. Sep 2007, 11:28
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>
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: XML auslesen

  Alt 8. Sep 2007, 11:52
Einen Ansatz habe ich dir ja schon genannt:

Zitat:
... 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. ...
Ein Beispiel:

Code:
<Localization lang="DE">
    <MainForm>
        <TopPanel>
            <NewButton Caption="&amp;Neu"/>
            <DeleteButton Caption="&amp;Löschen"/>
        </TopPanel>
    </MainForm>
    <NewDialog>
       
    </NewDialog>
</Localization>
Bei meinem Beispiel gehe ich davon aus, dass es für jede Sprache ein eigenes XML-Dokument gibt.

Ein weiterer Ansatz wäre: Du schaust mal wie das existierende Lösungen machen und kupferst dort ein wenig ab.

Freundliche Grüße
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#16

Re: XML auslesen

  Alt 9. Sep 2007, 11:11
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:
  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'];
Ich will das Attribut bei Caption einfach nur in einer String Variablen speichern.

<?xml version="1.0" encoding="ISO-8859-1"?>

<Language Lang="Deutsch">
<UMain>
<Label Caption="Neu" Tag="1" />
</UMain>
</Language>
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: XML auslesen

  Alt 9. Sep 2007, 13:22
Zitat von Christian18:
... Ich will das Attribut bei Caption einfach nur in einer String Variablen speichern.
das ist nicht so schwer:

Delphi-Quellcode:
begin
  // ...
  ShowMessage(Xml.DocumentElement
    .ChildNodes['UMain']
    .ChildNodes['Label']
    .AttributeNodes['Caption'].NodeValue
  );
  // ...
end;
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#18

Re: XML auslesen

  Alt 9. Sep 2007, 16:32
Zitat von marabu:
Zitat von Christian18:
... Ich will das Attribut bei Caption einfach nur in einer String Variablen speichern.
das ist nicht so schwer:

Delphi-Quellcode:
begin
  // ...
  ShowMessage(Xml.DocumentElement
    .ChildNodes['UMain']
    .ChildNodes['Label']
    .AttributeNodes['Caption'].NodeValue
  );
  // ...
end;
Hallo,

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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#19

Re: XML auslesen

  Alt 9. Sep 2007, 17:18
Die Fehlermeldung rührt nicht von meiner Code-Zeile her. Sie sollte verschwinden, wenn du Application oder self als Owner an TXMLDocument.Create() übergibst.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz