![]() |
Wie kann ich ein Attribut aus einer Node auslesen?
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:
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.
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; Die XML Datei sieht so aus:
Delphi-Quellcode:
Das Attribut sollte z.B. 1.211 sein, je nachdem was ich in der ListBox ausgewählt habe.
<?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> 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! |
Re: Wie kann ich ein Attribut aus einer Node auslesen?
Herzlich willkommen in der Delphi-PRAXiS, Euro2083.
Hier eine kleine Gehhilfe:
Delphi-Quellcode:
Getippt und nicht getestet.
procedure TDemoForm.ListBox1Click(Sender: TObject);
var NodeList: IXMLDOMNodeList; xmlDoc: IXMLDOMDocument2; i: Integer; nStandard, nName: IXMLDOMElement; sLeitsatz: string; begin // ... NodeList := xmlDoc.selectNodes('root/geha/standard'); for i := 0 to Pred(Nodelist.length) do begin nStandard := NodeList[i] as IXMLDOMElement; // nName := nStandard.firstChild as IXMLDOMElement; // EDIT sLeitsatz := VarToStr(nStandard.getAttribute('leitsatz')); // ... end; // ... end; Freundliche Grüße |
Re: Wie kann ich ein Attribut aus einer Node auslesen?
Herzlichen Dank für die superschnelle Hilfe!
Das ganze hat super geklappt. Konnte allerdings erst jetzt das ganze probieren, da ich die letzte Woche mit der Arbeit ganz gut ausgefüllt war. Beste Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz