Hallo allemaal,
Ik moet een XML file uitlezen waarbij sommige items meerdere niveau's hebben.
Op de een of andere manier krijg ik wanneer ik de Consumptions uit wil lezen geen data terug
De XML is als volgt opgebouwd
Code:
<InventoryData>
<InventoryItemData>
<PartNumber>195F050 52</PartNumber>
<UID>1561863465436445634</UID>
<SplitFromUID />
<Quantity>0</Quantity>
<Operator>kdevries</Operator>
<InitialQuantity>1</InitialQuantity>
<Consumptions>
<Consumption>
<Workstation>Work bench A</Workstation>
<Operation>Materiaal verbruiken</Operation>
<Batch>KdV non-serialized test</Batch>
<Recipe />
<Attempts>1</Attempts>
<Placements>1</Placements>
<Position />
<ProductUID>KdV non-serialized test</ProductUID>
<TimePosted>2021/04/15 12:01:27</TimePosted>
</Consumption>
</Consumptions>
</InventoryItemData>
<InventoryItemData>
<PartNumber>195F050 52</PartNumber>
<UID>1685486442324</UID>
...
Ik hiervoor de volgende code
Code:
function TNavFlXSync.ReadXML(aFile:string): boolean;
var
Doc: IXMLDocument;
Data: IXMLNode;
Node: IXMLNode;
EventNodes,EventNode:IXMLNode;
ConsumptionNodes,ConsumptionNode:IXMLNode;
j,i: Integer;
TempItemData:TInventoryItemData;
TempEvent:TEvent;
TempConsumption:TConsumption;
begin
Doc := LoadXMLDocument(aFile);
Data := Doc.DocumentElement;
j:=0;
while j<Data.ChildNodes.Count do
begin
Node := Data.ChildNodes[j];
TempItemData:=TInventoryItemData.create;
if Node.LocalName = 'InventoryItemData' then
begin
TempItemData.FPartNumber:=Node.ChildNodes['PartNumber'].Text;
TempItemData.FUID:= Node.ChildNodes['UID'].Text;
TempItemData.FSplitFromUID:=Node.ChildNodes['SplitFromUID'].Text;
TempItemData.FQuantity:=strToFloat(Node.ChildNodes['Quantity'].text);
TempItemData.FInitialQuantity:=strToFloat(Node.ChildNodes['InitialQuantity'].Text);
TempItemData.FUser:=Node.ChildNodes['Operator'].Text;
ConsumptionNodes:=Node.ChildNodes['Consumptions'];
for i:=0 to ConsumptionNodes.ChildNodes.Count -1 do
begin
TempConsumption:=TConsumption.create;
ConsumptionNode:=ConsumptionNodes.ChildNodes[i];
TempConsumption.FAttempts:= strtoint(ConsumptionNode.ChildNodes['Attempts'].Text); // Hier gaat het dus mis
TempItemData.Consumptions.Add(TempConsumption);
end;
EventNodes:=Node.ChildNodes['Events'];
for i:=0 to EventNodes.ChildNodes.Count -1 do
begin
TempEvent:=TEvent.create;
EventNode:=EventNodes.ChildNodes[i];
showmessage(EventNode.ChildNodes['EventNumber'].Text);
// TempEvent.FEventType:= EventNode.ChildNodes['EventType'].Text ;
// TempEvent.FNumber:= StrToInt(EventNode.ChildNodes['EventNumber'].text);
// TempEvent.FQuantityChange:= strToFloat(EventNode.ChildNodes['QuantityChange'].Text);
// TempEvent.FReasonCode:= EventNode.ChildNodes['Reasoncode'].Text ;
TempItemData.Events.Add(TempEvent);
end;
InventoryItemsData.Add(TempItemData);
end;
j:=j+1;
end;
result:=true;
end;
De vraag is dan ook hoe zorg ik ervoor dat ik de consumption data op een goeie manier kan uitlezen
Bookmarks