Autor Beitrag
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Sa 24.01.04 14:17 
Hi, ich weiss nciht ob die Überschrift passt, aber ich weiss einfach nicht wie ich es ausdrücken soll, werde gerne den Titel ändern.

Also ich habe folgednes Problem:
Ich habe eine XML Datei mit folgendem Inhalt (teil)

<fonts>
<font file="Font1.ttf" name="Font Groß" scale="92" />
<font file="verdana.ttf" name="Nimbus" />
</fonts>

Ich lese mit der MS Bibliothek aus

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
xFont := FXML.documentElement.selectNodes('fonts'); 
  for i:=0 to xFont.Length - 1 do
  begin
    for j:= 0 to xFont.item[i].childNodes.Length - 1 do
    begin
     subNode:= xFont.item[i].childNodes.item[j];
     ShowMessage(subNode.xml);
     ShowMessage(subNode.Text);
    end;
  end;


Die Informationen die ich gerne hätte stehen in subNode.xml gibt es eine Möglichkeit diese auch einzeln zu bekommen ,also jede Zeile für sich und jeweils mit den Eigenschaften die vorhande nsind?

Da ich nicht genau weiss wieviele und vor allem nciht welche Zusatzinfos kommen, verwende ich eine Stringliste um später dieselber Struktur neu erzeugen zu können.


Gruß Martin
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.01.04 16:05 
Ich weiß jetzt nicht ob das Tippfehler von dir sind, aber bei der Datei
ausblenden Quelltext
1:
2:
3:
4:
<fonts>
<font file="Font1.ttf" name="Font Groß" scale="92" />
<font file="verdana.ttf" name="Nimbus" />
</fonts>

dürfte
ausblenden Delphi-Quelltext
1:
xFont := FXML.documentElement.selectNodes('fonts');					

eigentlich nichts zurückliefern, weil du ja mit "documentElement" bereits auf dem Hauptknoten (<fonts>) bist. Aber egal. Du kannst natürlich an die Unterknoten ran. Zur Sicherheit mach´ ich´s mal so:
ausblenden Delphi-Quelltext
1:
xFont := FXML.selectNodes('fonts/font');					

Damit hast du in der Nodelist alle Knoten namens "font" und kannst auf deren Attribute zugreifen.

Gruß.
Martin77 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Sa 24.01.04 17:10 
Oh, sorry, ne also meine XML Struktur hat nur einen kleinen Teil der fotns heisst.

Ok, wenn ich es so wie du mache, bekomme ich jeweils in .XML den ganzen String zurück, den muß ich mir dann aber richtig zusammenparsen, oder gibt es eine möglichkeit das er mir zu jeden font Eintrag den Dateinamen, den Namen, die größe,... zurückgibt?
Momentan würde ich ja nur den String
font file="Font1.ttf" name="Font Groß" scale="92"
bekommen. aber ich hätte halt gerne

file=Font1.fft
name= Font Groß
scale=92
.
.
.




Gruß Martin
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.01.04 18:13 
Martin77 hat folgendes geschrieben:
Oh, sorry, ne also meine XML Struktur hat nur einen kleinen Teil der fotns heisst.

Aha. Wusste ich nicht. ;)

Wie dem auch sei, du erhältst doch mit der Nodelist Zugriff auf die gefundenen Knoten. Also so was wie
ausblenden Delphi-Quelltext
1:
xFont.item[0]					

Und jeder Knoten (IXMLDOMNode) erlaubt dir den direkten Zugriff auf die benutzten Attribute. Wenn du
ausblenden Delphi-Quelltext
1:
xFont.item[0].xml					

nimmst, dann erhältst du den Inhalt des Knotens im bekannten XML-Format. Aber es gibt noch andere Methoden (= Funktionen), mit denen du direkt die Attribute file, name und scale auslesen kannst. Schau dich einfach mal in der MS-XML-Doku um, denn zu meiner Schande muss ich gestehen, ich habe die passenden Befehle gerade nicht im Kopf. :oops:
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.01.04 18:41 
Titel: PS:
Hab´s gefunden, und hier ist ein kleines Beispiel. Meine Nodelist heißt allerdings "nl", aber das dürfte wohl das geringste Problem sein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
nl := xmldoc.selectNodes('fonts/font');

if(nl.length > 0) then
  for i := 0 to nl.length - 1 do
    ShowMessage(
      nl.item[i].attributes.getNamedItem('file').nodeValue +
      ' = ' +
      nl.item[i].attributes.getNamedItem('name').nodeValue
    );

Allerdings musst du vor dem Zuweisen an irgendwelche Strings prüfen, ob das Attribut überhaupt gefunden wurde. Der Rückgabewert von
ausblenden Delphi-Quelltext
1:
nl.item[i].attributes.getNamedItem					

ist vom Typ "IXMLDOMNode", so dass du ihn wie einen gewöhnlichen XML-Knoten behandeln kannst. Ist der Rückgabewert nil, gibt´s das Attribut nicht (s. "scale" in deinem zweiten Beispiel!).

Kommst du damit weiter?
Martin77 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Sa 24.01.04 19:29 
Super, ich danke dir, das ist genau das was ich gesucht habe.

Und wieder ein Stück weiter in XML :)

Ich wünsche euch allen einen schönen Samstag


Martin
Martin77 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: So 25.01.04 09:52 
Aber jetzt habe ich wieder ne nanderes Problem, auch die XML Doku von MS bringt mich nicht wirklich weiter.


in meiner XML Datei stoße ich jetzt auf folgendes:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<images basepath="countries">
    <img name="country_hu" src="hu.png" />
    <img name="country_ae" src="ae.png" />
    <img name="country_de" src="de.png" />
    <img name="country_es" src="es.png" />
</images>

<images basepath="shortcut">
    <img name="shortcut.0" src="button_0.png" />
    <img name="shortcut.1" src="button_1.png" />
</images>


Alles was hinter basepath steht kenne ich nicht :(

Hoffe du hast einen kleinen Tipp für mich ;)


Gruß Martin


Edit: Es hat sich gelöst

Bin selbst drauf gekommen.

Hab erst eine äußere Schleife über Images gemacht und dann pro Image Eintrag die imgs ausgelesen.


Also: es hat sicher erledigt :)