XML-Knoten Attributsvergabe



  • Hallo,
    bin gerade dabei ein XML-File mit dem BCB6 zu erstellen.
    Ich möchte nun dem Knoten plantkey das Attribut Description="Werksschlüssel" zuweisen.
    Dabei erstellt er Description="true". Ich habe keine Ahnung wo ich noch gucken kann.
    Bei den Attributen Datatype und Length ist es ähnlich.

    // Erstellen einer XML Datei
        TXMLDocument *XML = new TXMLDocument(""); // WICHTIG: kein Datei Namen übergeben, sonst Exception 
    
        XML->Options = XML->Options << doNodeAutoIndent;  
    
        XML->Active = true;      
        XML->Encoding = "UTF-16";    // Encoding festlegen, damit auch z.B. Umlauten richtig rüberkommen 
        XML->DocumentElement = XML->CreateElement(L"DW_XML", "");
    
           // Unterknoten mit Namen "DW_REC" erstellen
            _di_IXMLNode DW_RECNode = XML->DocumentElement->AddChild(L"DW_REC");
    
           // Für DW_REC Unterknoten "plantkey" erstellen
            _di_IXMLNode plantNode = XML->DocumentElement->AddChild("plantkey");
            plantNode->Attributes["Description"]="Werksschlüssel";
            plantNode->Attributes["Datatype"]="VARCHAR2";
            plantNode->Attributes["Length"]="4";
    
        // XML Dokument in eine Datei abspeichern
        XML->SaveToFile("c:\\test.xml");
        // Instanz Von XML löschen
        delete XML;
    

    Wäre Klasse wenn mir jemand einen Tip geben könnte.

    🙂

    Difu



  • Hast Du mal versucht anstatt die Eigenschaft Attribute die Methode SetAttribute() zu verwenden?
    Außerdem habe ich in meinem Code als zweiten Parameter von AddChild() eine -1 eingefügt. Sollte allerdings auch ohne das funktionieren.

    _di_IXMLNode plantNode = XML->DocumentElement->AddChild("plantkey", -1);
            plantNode->SetAttribute("Description", "Werksschlüssel");
            plantNode->SetAttribute("Datatype", "VARCHAR2");
            plantNode->SetAttribute("Length", "4");
    

    Gruß,

    Alexander



  • leider war es das auch nicht, gibt es vielleicht noch
    Optionen die man einstellen kann ??

    Gruss
    Difu



  • Ich habe mir nochmal meinen Code und die Hilfe zu Attributes (bzw. SetAttribute) angeschaut.
    Überall in meinem Code habe ich beim Setzen der Attribute für die Attributwerte entweder Variablen vom Typ AnsiString verwendet oder einen
    Cast auf AnsiString vorgenommen. Der Attributwert (also das zweite Argument von SetAttribute()) ist ja vom Typ OleVariant. Könnte sein,
    dass hierbei automatisch auf bool konvertiert wird.
    Was Du folglich mal probieren könntest, wäre etwas in der Art:

    plantNode->SetAttribute("Description", String("Werksschlüssel"));
    

    Gruß,

    Alexander



  • Super!!
    🙂

    Vielen Dank!

    Difu


Anmelden zum Antworten