Mit TinyXml ein File aus verschiedenen Klassen lesen



  • Hi zusammen.

    Habe ein XML Sprachfile und muss andauernt aus verschiedenen Dialogen auf dieses Sprachfile zugreifen können. Habe mir nun gedacht, dass ich im MainFrm eine get- oder eine read-Funktion habe, mit der ich meine gewünschten Texte holen kann.

    Um das XML File zu lesen, verwende ich TinyXml, was eigendlich auch ganz toll funktioniert. Aber wie stelle ich es an, um nicht bei jedem Funktions-Aufruf das XML-File neu zu laden? Das benötigt ja seine Zeit jedes mal das File neu zu öffnen bevor man in ihm lesen kann.

    Kann mir jemand genau sagen, wie ich da vorgehen kann?
    Ich muss doch den ladevorgang..

    TiXmlDocument languageDoc(de.xml);
    languageDoc.LoadFile())
    

    ..so global im MainFrm definieren, dass ich 'languageDoc' in meiner Funktion im MainFrm verwenden kann.

    gruss sabine



  • Verwendest du eine SDI-Anwendung? Pack das doch in deine Doc-Klasse. Die ist ja eh zum Halten der Daten da. Gib der Doc-Klasse eine Get- und eine Set-Funktion und überlass der Klasse das Laden und Schließen inclusive Fehlerbehandlung. Aus allen anderen Klassen lassen sich immer Zeiger auf das Doc erstellen, worüber man dann auch auf die Get- und Set-Funktion zugreifen kann.


  • Mod

    Bau Dir entweder ein Singleton, dass Du von überall nutzen kannst. Oder Pack das Objekt in Dein CWinApp Objekt rein. Dann kannst Du es auch überall erreichen.

    Willst Du das benutzen um Dein Programm Multilingual zu machen?
    Wenn ja halte ich solch eine Lösung für nicht so prickelnd.
    Ich bleibe lieber bei der klassichen Lösung mit Satelite-DLLs:
    http://www.mpdvc.de/artikel/MultilingualeProgramme.htm

    @AndyDD: Für eine allgemeine Sprachdatei ist das Dokument wohl nicht der richtige Platz.



  • @Martin: sorry, da hab ich wohl wieder mal nur die Hälfte gelesen. Du hast natürlich Recht. Der Artikel ist echt Klasse.



  • Wenn du trotzdem bei XML-Files bleiben willst, kannst du die Datei einmal einlesen und dir irgendwo das Root-Element merken. Dann muss die Datei nicht mehrfach gelesen und geparst werden.
    Wenn die Daten in der Form key = value vorliegen, pack sie in eine std::map.


Anmelden zum Antworten