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`? 😮


Log in to reply