Hallo,
ich habe ein Problem mit dem Auslesen der Attribute aus einer
XML Datei.
Ich verwende
MSXML 4.0 und Delphi 7
Mein Code ist:
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
const
Werte: Array[0..6] of string = ('name', 'Wasser', 'Fett', 'FE', 'BEFFE', 'BE', 'BErel');
var
Node, SubNode: IXMLDOMNode;
NodeList, SubNodeList: IXMLDOMNodeList;
i, j: integer;
WerteListe: Array[0..6] of string;
begin
if ListBox1.Selected[ListBox1.ItemIndex] then begin
Edit2.Text := 'true';
NodeList := xmlDoc.selectNodes('root/geha/standard');
for i := 0 to Nodelist.length - 1 do begin
Node := NodeList.item[i].selectSingleNode('name');
if Node.text = ListBox1.Items[ListBox1.ItemIndex] then begin
SubNodeList := xmlDoc.selectNodes('root/geha/standard[name="' + ListBox1.Items[ListBox1.ItemIndex] + '"]');
Edit4.Text := 'Attribut';
end;
end;
for i := 0 to SubNodeList.length - 1 do begin
SubNode := SubNodeList.item[i];
for j := 0 to length(Werte) - 1 do begin
SubNode := SubNodeList.item[i].selectSingleNode(Werte[j]);
WerteListe[j] := SubNode.Text;
end;
Edit5.Text := WerteListe[0];
Edit6.Text := WerteListe[1];
Edit7.Text := WerteListe[2];
Edit8.Text := WerteListe[3];
Edit9.Text := WerteListe[4];
Edit10.Text := WerteListe[5];
Edit11.Text := WerteListe[6];
end;
end;
Edit1.Text := IntToStr(ListBox1.ItemIndex);
Edit1.Text := ListBox1.Items[ListBox1.ItemIndex];
NodeList := xmlDoc.selectNodes('root/geha/standard');
for i := 0 to NodeList.length - 1 do begin
Node := NodeList.item[i].selectSingleNode('name');
end;
end;
Ich habe das Edit4.Text erstmal mit 'Attribut' ersetzt, da ich sonst nicht weitergekommen bin. Ist vielleicht auch etwas umständlich, aber bin neu auf diesem Gebiet.
Die
XML Datei sieht so aus:
Delphi-Quellcode:
<?
xml version="1.0"?>
<root>
<geha>
<standard leitsatz="1.211">
<
name>S I</
name>
<Wasser einheit="%">75</Wasser>
<Fett einheit="%">5</Fett>
<FE einheit="%">20</FE>
<BEFFE einheit="%">19</BEFFE>
<BE einheit="%">1</BE>
<BErel>5</BErel>
</standard>
<standard leitsatz="1.212">
<
name>S II</
name>
<Wasser einheit="%">73</Wasser>
<Fett einheit="%">8</Fett>
<FE einheit="%">19</FE>
<BEFFE einheit="%">17,5</BEFFE>
<BE einheit="%">1,5</BE>
<BErel>8</BErel>
</standard>
</geha>
</root>
Das Attribut sollte z.B. 1.211 sein, je nachdem was ich in der ListBox ausgewählt habe.
Später bräuchte ich auch noch die Attribute der Einheiten. Ist nicht immer nur %. Hoffe aber, dass ich das später dann auf die gleiche Weise auslesen kann.
Ich habe keine Ahnung, wie ich das lösen könnte. Ich habe hier in delphipraxis und in google schon gesucht aber keine Lösung gefunden. Vielleicht kann mir ja hier jemand helfen!
Herzlichen Dank!