11. januar 2012 - 15:10 Der er 5 kommentarer og
1 løsning

XML og INI FILER...

HEJ,

Jeg har nu i 3 dage forgæves søgt at få min XML fil til at opføre sig som en INI-fil (og initialise mine variable ved start, skrive tilbage ved pgm-lukning - osv), men enten er XML-filen "meget lidt lydhør for mine bønner" eller også gør jeg det forkert (sikkert det mest rigtige), så jeg har brug for en af experternes råd (kode ?) så jeg kan det til at køre.

Eksperimenter med at åbne XML-filer går tilsyneladende udmærket, men at skrive indholdet til komponenten  går galt.

eks:

<inidata>
<label1>
<komp>Label1</komp>
<value>Klik her:</value>
<label1>
<label2>
<komp>Label2</komp>
<value>Klik IKKE her:</value>
<label2>
...

</inidata>

Jeg kan læse hele møget ind i en Stringgrid, men direkte til label1 og label2 .... fungerer ikke...

Jeg bruger Delphi XMLDocument komponenten.

PS: Jeg kan ikke finde noget relevant på nettet...

PSS: Skal bruges i dansk, norske, svensk udgaver... (vælges ved da.xml, no.xml eller se.xml filen).



Kristian
Avatar billede vallemanden Nybegynder
11. januar 2012 - 15:35 #1
skal du ikke bruge
<komp>Label1.caption</komp>
11. januar 2012 - 15:47 #2
HEJ,

Tak for respons.

Når jeg skrev <komp>Label1</komp> mente jeg som KOMPONENT.

Det er muligt at når jeg får det til at virke (og her er jeg rimelig blank - da jeg har arbejdet med det i snart 3 hele dage og det funker stadig ikke ..) skal ændre dette til <komp>Label1.caption</komp> , eller til key eller måske noget helt andet. Jeg ved det ikke (endnu). 

Bruger jeg almindelige INI filer funker det, men jeg vil have det over på XML-niveau.

KR
13. januar 2012 - 16:55 #3
Har efter en del bøvlen og manipulering fundet en løsning, som virker  (men er utilfreds med den - er ikke smart nok (the delphi Way)), så jeg lader spm. stå åben en uge endnu og hvis der ikke kommer input lukker jeg.

KR
Avatar billede arne_v Ekspert
15. januar 2012 - 00:44 #4
Dette er ikke direkte men er trods alt ikke meget kode:

procedure TForm1.Button1Click(Sender: TObject);

var
  doc : TXMLDocument;
  nodelist : TDOMNodelist;
  i : integer;
  comp : TComponent;

begin
  ReadXMLFile(doc, 'C:\work\da.xml');
  nodelist := doc.GetElementsByTagName('komp');
  for i := 0 to nodelist.Count-1 do begin
    comp := FindComponent(nodelist[i].TextContent);
    if comp is TLabel then begin
      TLabel(comp).Caption := nodelist[i].ParentNode.FindNode('value').TextContent;
    end;
  end;
  doc.Free;
end;
22. januar 2012 - 18:30 #5
Hej Arne V

Det var netop noget i stil med det du foreslår som jeg var kommet frem til. Det kører men er noget tungt. Din løsning (med de lokale modifikationer, som er nødvendige) er meget bedre end min (sparer ca. 25 liniers kode, og kører hurtigere så hvis du dropper et svar er du 30 point rigere.

Kristian
Avatar billede arne_v Ekspert
22. januar 2012 - 18:39 #6
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester