Hallo,
ich möchte gerne Atttibute aus einem Knoten in ein dynamisches Array einlesen.
Hier im Forum habe ich gefunden das man auf Attribute mit einem führenden'@' als Subknoten des Primärelements zugreifen kann.
Will aber leider nicht klappen.
Ich versuche es aktuell so:
Delphi-Quellcode:
iXML.LoadFromFile(sAppStartPath + sTextDirPart + '\' + sVersion + '\' + sZsTimeFileDe);
iXML.Active:=true;
RootNode := iXML.ChildNodes['timezones'];
iXmlMldList := RootNode.ChildNodes;
iMldCount := iXmlMldList.Count;
setlength(aXmlTimeTexteDe, iMldCount + 1);
aXmlTimeTexteDe[0].iIndex := iMldCount;
for ix := 0 to (iMldCount - 1) do
begin
Node:= iXmlMldList.Nodes[ix];
aXmlTimeTexteDe[ix+1].sId := Node['@id'].Text;
aXmlTimeTexteDe[ix+1].sDisplay := Node['@Display'].Text;
aXmlTimeTexteDe[ix+1].sStd := Node['@Std'].Text;
aXmlTimeTexteDe[ix+1].sDlt := Node['@Dlt'].Text;
aXmlTimeTexteDe[ix+1].iIndex := strtointdef(Node['@Index'].Text, -1);
aXmlTimeTexteDe[ix+1].sDisplayID := Node['@DisplayID'].Text;
end;
Das Array aXmlTimeTexteDe ist vom Typ
Delphi-Quellcode:
type TXmlTimeTexte = record
sId : string;
sDisplay : string;
sStd : string;
sDlt : string;
iIndex : integer;
sDisplayID : string;
tDelayTimeStd : TTime;
tDelayTimeDlt : TTime;
bIncreaseTime : boolean;
end;
Die
XML Datei sieht aus wie folgt:
Code:
<?
xml version="1.0" encoding="UTF-8" ?>
<timezones>
<timezone
id="Afghanistan Normalzeit"
Display="(GMT+04:30)
Kabul" Std="Afghanistan Normalzeit"
Dlt="Afghanistan Sommerzeit"
Index="175"
DisplayID="(GMT+04:30) Kabul" />
...
<timezones>
Sobald ich auf den ersten Zugriff laufe (Node['@id'].Text) bekomme ich eine
Exception "Ungültige Variantenoperation".
Was mache ich denn bitte falsch?