Rekursive XML-ähnliche Struktur



  • Guten Abend.

    Aus XML kennen wir eine Baumzweig-Struktur die unendlich viele Kinder-Strukturen haben kann... z.b.:

    <Garage>
        <Autos>
            <Meins>
                <Farbe:"Rot">
            </Meins>
        </Autos>
    </Garage>
    

    Im Laufe des Programms können wir die Struktur um einige Elemente ergänzen:

    <Haus>
        <Hoehe:"12m">
        <Straße:"Musterstraße">
    
        <Wohnungen>
            ...
        </Wohnungen>
    <Haus>
    
    <Garage>
        <Autos>
            <Meins>
                <Marke: BMW>
                <Modell:"M4">
                <Farbe:"Rot">
             </Meins>
    
             <Nachbars>
                 <Marke:"VW">
             </Nachbars>
        </Autos>
    </Garage>
    

    Mit einem "vector < vector <Data> > data" wäre es eine 2D struktur und nur auf 2 Dimensionen begrenzt.

    Das Problem dabei ist, dass es kein Stufenlimit geben darf, jedes Objekt kann also unendlich viele Objekte haben, welche ebenfalls unendlich viele Elemente enthalten können...

    Meine Frage ist nun, wie man solch eine XML-ähnliche Hierarchie in C++ als Klasse implementieren könnte?



  • So in der Art?

    struct Tree {
      Tree* parent;
      Tree* childs;
    };
    


  • Ich denke mir das etwa so:

    class data {
    public:
      // Schnittstelle hier
    
    private:
      std::string                        name_;
      std::map<std::string, std::string> attributes_;
      std::deque<data>                   child_nodes_;
    };
    

    Dann hättest du in deinem Beispiel beispielsweise ein Objekt mit Namen "Haus", "Hoehe" und "Straße" wären in attributes_, und "Wohnungen" wäre der Name einer child node.

    std::deque deshalb, weil die Objekte darin nicht verschoben werden, wenn die deque wächst - die Kopien, die std::vector braucht, wenn er vergrößert wird, könnten hier sehr teuer werden. Mit C++11 und Move-Semantik dürfte das allerdings auch zu bewältigen sein.


Anmelden zum Antworten