HTML Datei lesen und verändern
-
Hallo,
Ich möchte gerne eine (ziemlich große) HTML-Datei mit C++ laden, einzelne Stellen im Code suchen, und dann diese Stellen verändern, bzw. etwas daran hinzufügen.
Leider habe ich überhaupt keine Vorstellung wie ich das mittels fstream realisieren soll, oder verwendet man hier überhaupt eine andere Funktion.
Ich hoffe ihr könnt mir Anregungen geben und Informationen wo ich tiefer nach einer Lösung suchen soll.
mit freundlichen Grüßen
Daniel Lang
-
Es kommt darauf an. Willst du aufbereitetes Wissen über die HTML-Struktur (z.B. welchen Wert hat das Attribut length?) ? Dann brauchst du einen Parser. Weil es eine große Datei ist eine Baumstruktur zu speicherintensiv. Bleibt noch soetwas wie SAX oder Ähnliches.
Willst du nur einzelne, gleichgeformte Stellen finden (z.B. die Adresse eines Links, also <a ... href="dashierwillich" ... >) dann kannst du das gut mit fstream machen. EInfach die Zeichen durchiterieren, nach <a, href=, ", " und > suchen. Nur den Zeichensatz hast du dann nicht.
Deswegen meine Empfehlung: Such dir einen Parser, ich habe gehört, libxml2 soll auch HTML parsen können (oder nur XHTML?)
geloescht
-
Ich sollte also am besten nach einem HTML-Parser für C++ Ausschau halten.
Aber was genau ist so ein Parser???Wie kann ich dann etwas suchen, bzw. verändern/hinzufügen.
Vielen Dank
-
Ein HTML-Parser bereitet eine HTML-Datei für dein Programm so aus, dass du sie schöner verwenden kannst. Er macht aus der Textwüste, die eine HTML-Datei ja ist, eine für dein Programm verständliche Representation.
http://de.wikipedia.org/wiki/Parser
geloescht
-
Vielen Dank,
jetzt verstehe ich ziemlich was ein Parser ist und das diese Teile ne tolle Sache sind,Weiß jemand vielleicht noch ein Beispiel für einen guten, brauchbaren HTML-Parser?
mit freundlichen Grüßen
Daniel Lang
-
Hier ist ein Code, wie du so eine Dartei öffnest!!
// Daten einlesen
#include <iostream>
#include <fstream>
using namespace std;int main()
{ifstream dat_ein;
string dateiname = ("datei.html");dat_ein.open(dateiname.c_str(), ios_base::in); //Öffnen der "datei.html"
if(!dat_ein) // Datei wurde nicht gefunden
{
cout << "Datei wurde nicht gefunden!\n";return -1;
}char zeichen;
while (!dat_ein.eof())
{
dat_ein.get(zeichen);
cout << zeichen;
}return 0;
}
-
Das Problem war nicht das öffnen von solchen Dateien, sondern die Frage wie ich solche Dateien bearbeiten soll. Dabei habe ich festgestellt dass ein Parser das ideale Hilfsmittel ist.
Jetz bin ich auf der Suche nach einem HTML-Parser geschrieben in C++...???
mit freundlichen Grüßen
Daniel Lang
-
Ja also wenn du mit der datei arbeiten möchtest, gibt es die Möglichkeit den inhalt in eine Variable zu speichern. Hier einmal der Code:
ifstream fin("datei.html");
fin >> d; // Inhalt in einer Variablen "d" gespeichert//zurückschreiben am Programmende:
ofstream fout("data.html");
fout << d;
//jetzt steht der (womöglich geänderte) Wert deiner Variablen in der DateiWenn du was darin speichern möchtest ist hier nochmal ein code:
// Speichern
ofstream dat_aus;
string dateiname;
dateiname = "datei.html";dat_aus.open(dateiname.c_str(), ios_base::out | ios_base::app);
if(!dat_aus)
{
cout << "Datei konnte nicht geoeffnet werden!";
cout << endl;
return -1;
}// Verschiedene Daten zum Testen in die Datei schreiben
string text = "Hier kannste einen text schreiben, der gespeichert werden soll";
double Nummer = 360; // Dies sind nur beispiele! du kannst auch ne variable angebendat_aus << text;
dat_aus << Nummer << "\n";