Fragen zu "_di_IXMLDocument"
-
Hi Fans der Delphi-Interfaces!
Ich habe mir mit TXMLDocument-Objekt folgendes XML-File (Beispiel) generiert:
<!--This file is machine generated. Don't change!--> <Optimizer> <TimeConst>777</TimeConst> <BufferFactor>5</BufferFactor> <PulseTime>8</PulseTime> <StreamServerAdress>192.168.2.100</StreamServerAdress> <OptimizerName>opt1</OptimizerName> <Situations> <BaseSituations> <TestSit1> <Id>1</Id> </TestSit1> <TestSit2> <Id>1</Id> </TestSit2> <TestSit3> <Id>1</Id> </TestSit3> <TestSit4> <Id>1</Id> </TestSit4> </BaseSituations> <EmergencySituations/> <ReferenceSituations> <SituationFiles> <File>c:\toast.jpg</File> </SituationFiles> </ReferenceSituations> </Situations> <Attributefunctions/> <Signals> <Huhu> <Id>2</Id> </Huhu> <Hooo> <Id>4</Id> </Hooo> </Signals> </Optimizer>
So.
mit der Funktion "InsertBaseSituation(...)" kann ich Basisituationen noch und nöcher erzeugen. Funktioniert soweit auch ganz gut.
bool XMLDBAccess::InsertBaseSituation(AnsiString sName) { _di_IXMLNode BSitNode; _di_IXMLNode NewBSit; _di_IXMLNode NewSigId; bool bRetVal = true; try { BSitNode = GetBaseSituationNode(); if (BSitNode) { NewBSit = XMLDoc->DocumentElement->AddChild(WideString(sName)); BSitNode->ChildNodes->Add(NewBSit); NewSigId = XMLDoc->CreateElement(L"Id", L""); NewSigId->NodeValue = 1; NewBSit->ChildNodes->Add(NewSigId); } else bRetVal = false; } catch ( ... ) { bRetVal = false; } return bRetVal; }
Im gleichen Atemzug habe ich mir noch eine Funktion namens "DeleteBaseSituation(...)" geschrieben:
bool XMLDBAccess::DeleteBaseSituation(int iIndex) { _di_IXMLNode BSitNode; _di_IXMLNode TempNode; bool bRetVal = true; try { BSitNode = GetBaseSituationNode(); if (BSitNode) BSitNode->ChildNodes->Delete(i); else bRetVal = false; } catch ( ... ) { bRetVal = false; } return bRetVal; }
Das komische ist aber, dass die eintsprechende Childnode (im Bsp: 0) nicht gelöscht wird, sondern nur folgendes heraus kommt (Verschiebung des Textes):
<!--This file is machine generated. Don't change!--> <Optimizer> <TimeConst>777</TimeConst> <BufferFactor>5</BufferFactor> <PulseTime>8</PulseTime> <StreamServerAdress>192.168.2.100</StreamServerAdress> <OptimizerName>opt1</OptimizerName> <Situations> <BaseSituations> <TestSit1> // 0 <Id>1</Id> </TestSit1> <TestSit2> <Id>1</Id> </TestSit2> <TestSit3> <Id>1</Id> </TestSit3> <TestSit4> <Id>1</Id> </TestSit4> </BaseSituations> <EmergencySituations/> <ReferenceSituations> <SituationFiles> <File>c:\toast.jpg</File> </SituationFiles> </ReferenceSituations> </Situations> <Attributefunctions/> <Signals> <Huhu> <Id>2</Id> </Huhu> <Hooo> <Id>4</Id> </Hooo> </Signals> </Optimizer>
Hat jemand eine Erklärung dafür, und wie kann ich nun die Node richtig löschen?
-
Und was sucht das hier im C++ Forum`?