Massen HTML-Daten verarbeiten - Stapelverarbeitung / Batch / Platzhalter / Datenzusam

  • [FONT=&quot]Hallo,[/FONT]
    [FONT=&quot]
    ich möchte gerne eine ganzen Menge selbst-gecodete HTML-Seiten verarbeiten. Ca. 700.[/FONT]
    [FONT=&quot]
    Als Stapelverarbeitung, Batch oder Datenzusammenführung mit Platzhaltern[/FONT]
    [FONT=&quot]
    [/FONT]
    [FONT=&quot]
    Es soll in einer Vorlagen-HTML Datei Platzhalter eingefügt werden, die aus einer Excel-Datei entnommen & zusammengeführt werden.[/FONT]
    [FONT=&quot]
    [/FONT]
    [FONT=&quot]
    Z.B. soll sich der Websiten-Titel der Vorlagen-Datei immer ändern in: Hompage Berlin, Homepage Stuttgart, Homepage München[/FONT]
    [FONT=&quot]
    Dann soll die Datei jeweils für sich allein abgespeichert werden als berlin.html,stuttgart.html, münchen.html[/FONT]
    [FONT=&quot]
    [/FONT]
    [FONT=&quot]
    Ich möchte also ohne großen Aufwand, größere Mengen an HTML-Daten erstellen, in die ich Platzhalter einfügen kann und dann nach Vorgabe einzeln abspeichern.[/FONT]
    [FONT=&quot]
    [/FONT]
    [FONT=&quot]
    Danke für hilfreiche Antworten![/FONT]

  • Im Nachhinein wirds schwer. Es gibt aber Editoren, die mit Platzhaltern, Includes arbeiten. Die haben dann evtl. auch noch dateiübergreifendes Ersetzen. Evtl. hast du solch einen Editor im Einsatz?

    Automatisches Ersetzen und abspeichern in eine neu Datei kenne ich dagegen nicht.

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Sorry, ich habe mich falsch ausgedrückt. Ich habe eine Datei, aus der ich ca. 700 HTML Dateien erzeugen möchte. Wie heißen die Editoren mit Platzhalter-Funktion ?

  • So etwas ließe sich sicherlich mit vertretbarem Aufwand mit zB PHP realisieren.
    csv Datei aus Excel Tabelle erzeugen - mit PHP in ein Array einlesen - Ursprungs-HTML Datei zeilenweise einlesen und danach sollte es nur noch eine paar for- bzw while- Schleifen bedürfen, um die 'Platzhalter' durch die Daten aus der csv auszutauschen und entsprechend zu speichern. Problem könnte da nur die Laufzeit der Routine machen, denn das könnte bei 700 Dateien eine ganze Weile brauchen und mitunter ist die zulässige Laufzeit auf dem Server (Localhost) limitiert.

    if(!sleep)

    {$sheep++;}

    • Offizieller Beitrag

    Hallo,

    Sooo groß wird der Aufwand nicht sein, ich frage mich nur, ob ich das richtig verstanden habe:
    Du hast eine statische Standard HTML Datei und willst daraus quasi mehrere Kopien mit unterschiedlichen Titeln machen, um mal bei Deinem Beispiel zu bleiben?

    Also aus

    HTML
    <!DOCTYPE html>
    <html lang="de">
    <head>
    <title>irgendeintitel</title>
    ...


    sollen diese Duplikate entstehen:

    HTML
    <!DOCTYPE html>
    <html lang="de">
    <head>
    <title>Berlin</title>
    ...
    HTML
    <!DOCTYPE html>
    <html lang="de">
    <head>
    <title>Stuttgart</title>
    ...

    usw.?

    Wenn ja, dann geht das relativ einfach per DOMDocument/DOMXPath.
    Du legst Dir quasi Arrays an, in denen die "Ersetzungen" definiert sind und läufst mit dem DOMParser einfach über das Original und speicherst das Ergebnis als neue Datei.
    Evtl. würde ich die Ersetzungen und Zieldateinamen auch per XML konfigurieren und einlesen, aber das sind nur Vermutungen, weil mir immer noch ein konkretes Beispiel fehlt.

    Gruß Arne

  • Hallo und danke.
    Korrekt Arne Drews. DOMDocument/DOMXPath sieht für mich als blutiger Anfänger zwar recht kompliziert aus, aber ich hoffe, dass ich das hinbekomme.

    Ich habe mir das einfacher vorgestellt :) Vgl. einer Serienbrieffunktion von Word o.Ä.

    Eventuell hat mir jemand noch eine solche Software als Empfehlung.

    • Offizieller Beitrag

    Das aufwendigste bei Deinem Vorhaben ist die Ersetzungsbasis, da niemand ( auch kein Programm ) wissen kann, welche Textpassagen Du ersetzen willst.
    Daher wird ein Automatismus über ein Programm vom Aufwand nicht weniger, sondern eher mehr werden.

    Du solltest die Basis selbst schaffen und dann die DOMDocument/DOMXPath Variante wählen.
    Wenn Du Fragen dazu und/oder dem verlinkten Tutorial hast, kannst Du mich gerne kontaktieren. Es sieht nur kompliziert aus, ist aber relativ einfach und effektiv.

  • Die Problemstellung ist hier so individuell, dass nach meiner Meinung auch am ehesten eine individuelle, maßgeschneiderte Lösung zum Erfolg führt.
    Die notwendigen Parameter sind doch (zumindest dem Fragesteller) bekannt.
    Es existiert eine HTML Datei, in der Wörter/Begriffe enthalten sind, die durch Wörter/Begriffe zu ersetzen sind, die in einer Excel-Tabelle vorgegeben sind.
    Die zu ersetzenden Wörter/Begriffe (Platzhalter) aus der HTML Datei sind dem Fragesteller bekannt.
    Vorausgesetzt, dass die Excel-Tabelle eine 'sinnvolle' Struktur hat - zb zeilenweise Auflistung der Ersatzwörter - dann können diese bekannten Platzhalter auch in Zeile 1 der Tabelle aufgelistet werden...
    [TABLE='class: grid, width: 700, align: left']

    [tr][td]

    Platzhalter 1

    [/td][td]

    Platzhalter 2

    [/td][td]

    Platzhalter 3

    [/td][td]

    Platzhalter 4

    [/td][td]

    usw...

    [/td][/tr][tr][td]

    Ersatzbegriff 1

    [/td][td]

    Ersatzbegriff 2

    [/td][td]

    Ersatzbegriff 3

    [/td][td]

    Ersatzbegriff 4

    [/td][td]

    usw..

    [/td][/tr][tr][td]

    Ersatzbegriff 1

    [/td][td]

    Ersatzbegriff 2

    [/td][td]

    Ersatzbegriff 3

    [/td][td]

    Ersatzbegriff 4

    [/td][td]

    usw...

    [/td][/tr][tr][td]

    Ersatzbegriff 1

    [/td][td]

    Ersatzbegriff 2

    [/td][td]

    Ersatzbegriff 3

    [/td][td]

    Ersatzbegriff 4

    [/td][td]

    usw...

    [/td][/tr][tr][td]

    ...

    [/td][td]

    ...

    [/td][td]

    ...

    [/td][td]

    ...

    [/td][td]

    ...

    [/td][/tr]


    [/TABLE]

    Man kann diese Dateien also programmgesteuert einlesen (Excel-Tabelle vorher in eine CSV Datei umwandeln) und in den Arrays $html und $csv zur weiteren Verarbeitung nutzen.
    Mit einer Schleife über alle Elemente von $html (Startwert n=0)

    PHP
    $html[n] = str_replace($csv[n], $csv[n+1], $html[n]);


    erfolgt dann der Tausch Platzhalter gegen Ersatzbegriff.
    Wobei ich mir nicht sicher bin, wie str_replace auf das multidimensionale Array $csv reagiert und ob man nicht vorher aus den Zeilen eindimensionale Arrays erzeugen sollte.
    Damit ist das komplette HTML Dokument geändert und kann unter dem gewünschten Namen, der ja auch in der Tabelle angegeben ist, gespeichert werden.

    Die obige Schleife über alle Elemente von $csv wiederholen... fertig!

    - - - Aktualisiert - - -

    Ich sehe es gerade... kleiner logischer Fehler!
    In der ersten Schleife muss natürlich der 'Zähler' für das Array $csv konstant bleiben - also...

    PHP
    $html[n] = str_replace($csv[x], $csv[x+1], $html[n]);


    Wobei sich dann 'x' erst in der nächsten Schleife über die Anzahl der Elemente von $csv jeweils um 1 erhöht.

    if(!sleep)

    {$sheep++;}

    • Offizieller Beitrag

    Wer garantiert Dir, dass ein/e Wort/Textpassage, die an einer Stelle ersetzt werden soll nicht auch in einem Fließtext auftaucht, aber unverändert bleiben soll?!
    Nach Deinem Vorschlag wäre das eine "Vermutungs"-Ersetzung, keine Garantie, dass die Resultate wirklich korrekt sind.

    Das DOM zu verarbeiten macht hier imho deutlich mehr Sinn.

  • Arne Drews
    Das müsste/sollte der Fragesteller wissen, ob es Textpassagen im HTML Dokument gibt, die ausgeschlossen werden sollen - ansonsten hast du natürlich Recht. Meine Methode ändert alle Vorkommnisse der Platzhalter. Aber ohne nähere Informationen über die fragliche .html und die zugehörige . xls sind das alles nur akademische Betrachtungen. Nur wenn man es ausprobiert, weiß man sicher, ob es funktioniert oder nicht.

    if(!sleep)

    {$sheep++;}

  • Vielen Dank für die vielen Informationen, die für mich als Laie (zugegeben) noch schwer zu greifen sind.

    Ich versuche näher auf die eine Ursprungsdatei einzugehen, aus der dann ca. 700 HTML-Dateien generiert werden sollen:

    -in der HTML-Ursprungsdatei würde ich einen Platzhalter "ORT" eingegeben
    -in der xls/csv sind 700 Orte eingepflegt
    -in der Ursprungsdatei muss "ORT" mit der ersten Zeile in der xls/csv (z.B. Berlin) ersetzt werden. Es wurde dann ca. 5 mal "ORT" gesucht und durch "BERLIN" ersetzt
    -die nun generierte Datei muss wie die erste Zeile in der xls/csv - hier also Berlin - als "berlin.html" abgespeichert werden.

    Dann geht es wieder von vorne los, "ORT" wird in der Ursprungsdatei gesucht und dann mit der Zeile 2 - z.B. "Berlin-Tegel" ersetzt. Die Datei wird dann wieder als "Berlin-Tegel.html" erstellt.

    Und immer so weiter.

  • Versuch mal so.

    vorlage.txt

    generator.php

    Einmal editiert, zuletzt von Arne Drews (3. Juli 2017 um 08:04) aus folgendem Grund: MOD: Code-Tags angepasst

    • Offizieller Beitrag

    Kann man so machen, ich würde allerdings das file_get_contents() und explode()-Gebinde mit file() ersetzen:

    PHP
    $sVorlage = file_get_contents( 'vorlage.html' );
    $aOrte = file( 'liste.csv', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES );
    
    
    foreach ( $aOrte as $ort )
        file_put_contents( $ort . '.html', str_replace('[ORT]', $ort, $sVorlage) );
  • WOOOOW Prima ich habe es durch eure Hilfe hinbekommen - unglaublich :)

    Kurze Zusammenfassung für die Anfänger:
    1. XAMMP herunterladen und installieren
    2. Im XAMMP Programm "Apache" und "MySQL" einfach starten
    3. Dieses Video auf yotube anschauen und erste Erfahrungen sammeln, dauert nur ein paar Minuten:
    "How to Run PHP in XAMPP - Testing PHP Tutorial" von Ken Swartwout
    4. Eine Datei erstellen in z.B. "Wordpad" mit dem Inhalt in das Verzeichnis Bsp.: D:\xampp\htdocs

    PHP
    <?php
    $sVorlage = file_get_contents( 'vorlage.html' );$aOrte = file( 'liste.csv', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES );
    foreach ( $aOrte as $ort )    file_put_contents( $ort . '.html', str_replace('[ORT]', $ort, $sVorlage) );?>

    5. Eine liste.csv Datei in Excel erstellen mit den Orten, direkt in der Zeile A1 mit den Orten beginnen
    6. Eine vorlage.html mit "Wordpad" erstellen in das Verzeichnis Bsp.: D:\xampp\htdocs

    HTML
    <!DOCTYPE HTML>
    <html><head><title>[ORT]</title><meta charset="UTF-8"></head>
    <body><h1>[ORT]</h1></body></html>

    7. http://localhost/generator.php in den Webbrowser eingegeben.
    8. Mit ganz vielen HTML-Dateien glücklich werden.

    Die Vorlage.html muss dann natürlich mit der eigenen html Datei ersetz werden. Platzhalter ist dann der [ORT]


    Danke nochmal an alle. Falls mir noch etwas auffällt oder nicht ganz läuft melde ich mich :)

  • So ich habe noch eine Frage. Leider bekomme ich es nach einigen Tests nicht hin. Es ist wahrscheinlich kinderleicht. Wie bekomme ich ein immer gleichbleibendes Wort vor den [ORT] der ausgegebenen HTML Datei.

    Also statts [ORT].html (berlin.html)
    soll
    Stadt-[ORT].html (stadt-berlin.html, stadt-berlin-tegel.html, usw.) ausgegeben werden

    :)

  • Indem du in der Zeile, in der die Datei gespeichert wird, statt

    $ort . '.html'

    einfach

    'Stadt-' . $ort . '.html'

    einfügst.

    if(!sleep)

    {$sheep++;}

    Einmal editiert, zuletzt von Sailor (8. Juli 2017 um 13:46)


  • 1. XAMMP herunterladen und installieren


    Damit fängt es schon an, XAMPP ist für mich mittlerweile nur noch eine Notlösung. Den Apachen mit PHP einzeln zu installieren, ist kein Hexenwerk, MariaDB ist da nicht anders. Und phpMyAdmin bekommt man auch schnell installiert, wenn man es denn braucht. In XAMPP hat man einen Overhead, den man nicht oder nur selten braucht.

  • Super, danke Sailor.

    Jetzt wird es wahrscheinlich komplizierter :)

    Wenn ich die Daten aus der .csv entnehme, führt es durch die Umlaute ä ö ü in den Stadtnamen zu Problemen. Ich muss also 2 Spalten in der .csv machen.

    Spalte 1 - Ortsnamen ohne HTML Umlaute für den .html-Dateinamen
    Spalte 2 - Platzhalter [Ort]: Mit HTML-lesbaren Umlaute-Code für den .html-Datei-Inhalt

    Dann hätte ich gerne noch variablen Text um den Inhalt der HTML Datei aufzubauen
    Spalte 3 - Platzhalter [Text1]
    Spalte 4 - Platzhalter [Text2]
    Spalte 5 - Platzhalter [Text3]
    Spalte 6 - Platzhalter [Text4]

    Beispieldaten wie die .csv aussieht:

    [TABLE='class: grid, width: 500, align: center']

    [tr][td]

    Österreich

    [/td][td]

    &Ouml;sterreich

    [/td][td]

    Servus

    [/td][td]

    Hier gehts lang

    [/td][td]

    Danke daf&uuml;r

    [/td][td]

    php Neuling

    [/td][/tr][tr][td]

    Stuttgart

    [/td][td]

    Stuttgart

    [/td][td]

    Hi

    [/td][td]

    Vielen Dank

    [/td][td]

    Dort gehts lang

    [/td][td]

    HTML für Erfahrene

    [/td][/tr][tr][td]

    Berlin

    [/td][td]

    Berlin

    [/td][td]

    Super Sache

    [/td][td]

    Danke f&uml;r die Hilfe

    [/td][td]

    php f&uml;r Anf&auml;nger

    [/td][td]

    Hier gehts mit dem Text weiter

    [/td][/tr]


    [/TABLE]

    Wie lautet hier der php-Code? Ich habe schon etwas mit den .php-Einsteiger Tutorials geübt aber mir fehlt einfach noch die Übung...