Einzelnen Beitrag anzeigen

Euro2083

Registriert seit: 17. Apr 2008
2 Beiträge
 
#1

Wie kann ich ein Attribut aus einer Node auslesen?

  Alt 9. Jun 2008, 17:46
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!
  Mit Zitat antworten Zitat