Entwickeln einer Klasse



  • Hey @all,

    ok bevor ich frage hier ein kurzes Beispiel aus einem PHP Code:

    // Neues Dokument erzeugen
    $dom = domxml_new_doc('1.0');
    
    // Wurzelelement <book> anglegen und an das Dokument hängen
    $book = $dom->append_child($dom->create_element('book'));
    
    // Titel-Element erzeugen und an $book anhängen
    $title = $book->append_child($dom->create_element('title'));
    
    // Text und Jahr-Attribute zu $title setzen.
    $title->append_child($dom->create_text_node('My Book');
    $title->set_attribute('year', '2004');
    
    // Autor-Elemente erzeugen und an $book hängen.
    $author1 = $book->append_child($dom->create_element('author'));
    // Den Text zu jedem Element erzeugen und anhängen
    $author1 = $book->append_child($dom->create_text_node('Max'));
    
    $author2 = $book->append_child($dom->create_element('author'));
    $author2 = $book->append_child($dom->create_text_node('Mustermann'));
    
    // Ordenliche formatierte Version des DOM-Dokuments in XML ausgeben
    echo $dom->dump_mem(true);
    

    AUSGABE:

    <?xml version=1.0"?>
    <book>
      <title year="2004">My Book</title>
      <author>Max</author>
      <author>Mustermann</author>
    </book>
    

    OK, nun zu meiner Frage, ich weiß das es unzählige fertige Klassen für so etwas gibt, mir geht es aber eher um den Lernerfolg, und nun dachte ich mir, ich probiere mal so eine Klasse in C++, soweit so gut, nur weiß ich nicht wirklich wie ich das umsetzen soll?
    Brauche ich da mehrere Klassen oder genügt nach dem Beispiel nach eine Klasse?

    Kann mir diesbezüglich bitte jemand einen Denkanstoß geben?

    Vielen Dank im Voraus
    MfG Roman1311



  • also mit einer klasse wirst du dabei nicht auskommen.

    shau z.b. mal bei http://expat.sourceforge.net/ um abzuschätzen worauf du dich dabei einlässt.
    kurt



  • Also ich habe mir das mal angesehen.

    Ich wollte ja nicht gleich Bibliotheken für andere oder so entwickeln, ich wollte mich nurmal mit der Thematik beschäftigen, um aus meinen Programmen heraus halt schnell eine XML-Datei zu erzeugen, ist wirklich nur als Lernzweck.

    MfG Roman1311



  • das ist mir schon klar.
    um einfach xml-code auszugeben gehts auch einfacher z.b

    cout << "<?xml version=\"1.0\"?>" << endl;
    cout << "<book>" << endl;
    cout << "  <title year=\"2004\">My Book</title>" << endl;
    cout << "  <author>Max</author>" << endl;
    cout << "  <author>Mustermann</author>" << endl;
    cout << "</book>" << endl;
    

    habe deine ursprüngliche frage aber so verstanden dass du das DOM implementieren willst und das ist nicht gar so einfach.
    Kurt



  • Nein, ich wollte DOM nicht implementieren, ich wollte lediglich eine Klasse schreiben, die ich dann so ähnlich verwenden kann wie in diesem Beispiel, also in etwas so:
    Instanz = Object->appendchild(Object->create_text_node(STRING));

    und bei der funktion: Object->dump_mem() soll er halt das ganze halt ausgeben

    Ich wollte es deswegen, weil ich nicht dauernd mit

    cout << "<...>irgendwas</...>"
    

    arbeiten will, sondern das halt zukünftig meine Klasse für mich erledigen soll, so das halt am ende eine schöne XML-Datei dabei herauskommt, mit einrückungen usw.

    MfG Roman1311



  • ok.
    das dokument würde ich als baum-struktur aufbauen.
    jedes element in diesem baum müsste einen namen, attribute, und daten bekommen
    dann hättest du erstmal die daten die du für die ausgabe eines elements brauchst
    z.b.
    element.dump() könnte folgendes machen

    für den anfangs tag

    cout << getindent() << "<" << getname() << dump_attributes() << ">" << endl;
    

    für die daten

    cout << getindent() << dumpdata() << endl;
    

    für den end-tag

    cout << getindent() << "</" << getname() << ">" << endl;
    

    die methode getindent() müsste einen string zurückgeben die der tiefe im baum entspricht.
    dann müsste dump() sich nur noch rekursiv für alle child-elements aufrufen und
    schon hättest du formatiertes XML.
    ( habe sowas irgendwann schon gemacht. kann mich erinnern dass ich einige wochen gebraucht habe bis
    es funktioniert hat und am ende war es doch fast eine komplette implementation von DOM )
    Kurt


Anmelden zum Antworten