![]() |
xml-node-attribute
hallo zusammen,
mal wieder wende ich mich an euch :shock: . 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:
meine dalphi-6-fkt sieht so aus:
<attribute>
<stammdaten id="0"> ..... </stammdaten> ...... <autodaten id="0"> ..... </autodaten> ...... </attribute>
Delphi-Quellcode:
ich habe dadurch folgendes ergebnis erhofft
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;
XML-Code:
bekomme aber leider die fehlermeldung
<attribute>
<stammdaten id="0"> ..... </stammdaten> ...... <autodaten id="0"> ..... </autodaten> <autodaten id="1"> ..... </autodaten> ...... </attribute>
Delphi-Quellcode:
benutze ich in delphi irgend eine falsche methode? ich habe es auch mit
Zugriffsverletzung bei Adresse 004BA08D in Modul 'PCapi.exe'. Lesen von Adresse 00000000
XMLDOMAutoDatenNodeNeu.selectSingleNode('//autodaten/@id').nodeValue := IntToStr(newID); ausprobiert, aber leider auch ohne erfolg :cry: . danke im vorraus. LG. |
Re: xml-node-attribute
Hallo salem01,
hier ein wenig ungetester Code für dich zum Studieren. Du schreibst von D6 und hast deinen thread unter .NET klassifiziert - scheint ein Versehen zu sein.
Delphi-Quellcode:
Grüße vom marabu
function FahrzeugRecordAnlegen(var xml: string): string;
var doc: IXMLDOMDocument; nLast, nSucc: IXMLDOMNode; nextID: integer; begin doc := CoDOMDocument.Create; with doc do begin async := false; loadXML(xml); // can fail end; nLast := doc.selectSingleNode('//autodaten[last()]'); if Assigned(nLast) then begin with nLast as IXMLDOMElement do nextID := getAttribute('id'); with nLast do nSucc := cloneNode(true) as IXMLDOMElement;; with nLast as IXMLDOMElement do setAttribute('id', IntToStr(nextID)); nLast.parentNode.appendChild(nSucc); end else begin // your turn now end; Result := doc.xml; end; |
Re: xml-node-attribute
danke marabu,
sorry das ich .net ausgewählt habe, wie du sagtest, ausversehen. habe jetzt was von deinem code verwendet, das das problem gelöst hat, und es tut :) . danke nochmals. Gruß. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 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