hallo zusammen,
mal wieder wende ich mich an euch
.
ich habe die
xml-datei attribute.xml und versuche über eine delphi fkt. (durch button-klick) einen knoten mit seinen unterknoten zu kopieren und anzuhängen wobei das attribut id immer um eins erhöht werden soll (also alles eins zu eins kopieren mit einer inkrementierten id!).
die
xml-struktur sieht folgerndermassen aus:
XML-Code:
<attribute>
<stammdaten id="0">
.....
</stammdaten>
......
<autodaten id="0">
.....
</autodaten>
......
</attribute>
meine dalphi-6-fkt sieht so aus:
Delphi-Quellcode:
function FahrzeugRecordAnlegen(var attributeXML: string): String;
var
XMLDOMAttribute : IXMLDOMDocument;
XMLDOMAutoDatenNode : IXMLDOMNode;
XMLDOMAutoDatenNodeNeu : IXMLDOMNode;
XMLDOMNodeListIDs: IXMLDOMNodeList;
XMLDOMNodeId : IXMLDOMNode;
newID : integer;
begin
XMLDOMAttribute := CoDOMDocument40.Create;
XMLDOMAttribute.async := false;
XMLDOMAttribute.loadXML(attributeXML);
XMLDOMNodeListIDs := XMLDOMAttribute.selectNodes('//autodaten/@id');
XMLDOMNodeId := XMLDOMNodeListIDs.nextNode();
newID:= 0;
while(NOT(XMLDOMNodeId=NIL)) do
begin
if(StrToInt(XMLDOMNodeId.nodeTypedValue) > newID) then
begin
newID := StrToInt(XMLDOMNodeId.nodeTypedValue);
end;
XMLDOMNodeId := XMLDOMNodeListIDs.nextNode();
end;
newID := newID+1;
XMLDOMAutoDatenNode:= XMLDOMAttribute.selectSingleNode('//autodaten');
XMLDOMAutoDatenNodeNeu:= XMLDOMAutoDatenNode.cloneNode(true);
XMLDOMAutoDatenNodeNeu.selectSingleNode('//autodaten/@id').text := IntToStr(newID);
XMLDOMAttribute.selectSingleNode('/attribute').appendChild(XMLDOMAutoDatenNodeNeu);
result := XMLDOMAttribute.xml;
end;
ich habe dadurch folgendes ergebnis erhofft
XML-Code:
<attribute>
<stammdaten id="0">
.....
</stammdaten>
......
<autodaten id="0">
.....
</autodaten>
<autodaten id="1">
.....
</autodaten>
......
</attribute>
bekomme aber leider die fehlermeldung
Zugriffsverletzung bei Adresse 004BA08D in Modul 'PCapi.exe'. Lesen von Adresse 00000000
benutze ich in delphi irgend eine falsche methode? ich habe es auch mit
XMLDOMAutoDatenNodeNeu.selectSingleNode('//autodaten/@id').nodeValue := IntToStr(newID);
ausprobiert, aber leider auch ohne erfolg
.
danke im vorraus.
LG.