Boost: HTML Template parsen->regex_merge



  • Halloli.

    Ich versuche mich gerade mit boost.
    Und zwar möchte ich ein Templatesystem aufbauen.
    ich habe verschiedene fertige HTML Dateien in denen ich Platzhalter habe:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
      <title>%title%</title>
    </head>
    <body>
    
    %text%
    </body>
    </html>
    

    Die Platzhalter %title% und %text% ersetze ich nahher im Programm durch Text.
    Das sieht bisher so aus:

    boost::regex tag_title("(%title%)", boost::regbase::normal | boost::regbase::icase);
    	boost::regex tag_text("(%text%)", boost::regbase::normal | boost::regbase::icase);
    
    	CAusgabe as;
    	ifstream is;
    	std::string str_input,s;
    
    is.open("c:\\www\\images\\pephtml\\pepindex.tpl",ios::in | ios::out);
    
    		if(is.good())
    		{
    			while (!is.eof())          // Solange noch Daten vorliegen
    			{
    				getline(is, s);        // Lese eine Zeile			
    				str_input.append(s);      
    			}			
    		}
    		else
    		{
    			//Fehlerbehandlung
    		}
    
    	is.close();
    
    str_input= boost::regex_merge( str_input, tag_title, "Text für Title");
    str_input= boost::regex_merge( str_input, tag_text, "Text für den Hauptteil");
    
    as.Write_Client(pECB_,str_input);
    

    Mit WriteClient schicke ich das dann an der Browser.
    Funktioniert soweit gut.

    Nur habe ich das Problem, daß die leerzeichen und CR/LF ZEichen nicht mit eingelesen werden, bzw. sie werden nicht ausgegeben.
    Der HTML Queltext ist nachher alles in einer Zeile.

    Liegt das irgendwie an boost?

    Und 2.

    Ich ersetze ja bisher 2 Platzhalter einzeln.
    Was wenn ich malk 50 Platzhalter in einer HTML Datei habe, dann muss ich das 50 mal ersetzen=
    Geht das irgendwie einfacher?

    3. gibts irgendeine Deutsche Doku zuz boost?
    Das ist zwar ganz schön auf English aber auf dauer anstrengend:-)

    Vielen Dank für anregungen, Mondmann



  • Das hat nichts mit Boost zu tun. Aber getline liest die Zeile /ohne/ \n!



  • achso...und was liest dann die Zeilen mit \n ein?



  • Füg doch einfach selber ein \n hinzu, nachdem du getline gemacht hast.



  • Artchi schrieb:

    Füg doch einfach selber ein \n hinzu, nachdem du getline gemacht hast.

    Hm.aber es sind doch in einer Zeile auch noch Leerzeichen die auch nicht mit eingelesen werden.

    Gibts denn nicht eine andere Funktion, eine mit der ich gleich die ganze datei einlesen kann?



  • Mondmann schrieb:

    Artchi schrieb:

    Füg doch einfach selber ein \n hinzu, nachdem du getline gemacht hast.

    Hm.aber es sind doch in einer Zeile auch noch Leerzeichen die auch nicht mit eingelesen werden.

    Gibts denn nicht eine andere Funktion, eine mit der ich gleich die ganze datei einlesen kann?

    Nicht so komfortabel. Du kannst die Datei mit get in ein char-Array einlesen und dann entweder damit arbeiten oder es einfach einem String zuweisen.

    Bist du dir sicher, dass die leeren Zeilen nicht eingeleseen werden?! Probiers doch einfach mal wie Artchi es gesagt hat.



  • ansonsten ersetze doch die freizeichen deines htmlcodes durch

    &nbsp;
    

    dies schreibt jedes mahl ein freizeichen ohne dabei lehrzeichen im html quellcode zu haben


Anmelden zum Antworten