Antworten auf deine Fragen:
Neues Thema erstellen

Pfade im HTML Code via PHP austauschen

CrazyPlaya

Noch nicht viel geschrieben

Nabend zusammen,

ich versuche gerade in einer HTML Datei die Pfade im Style Attribut via PHP Script anzupassen.

Zum Einlesen der HTML Datei nutze ich
Code:
$doc = new DOMDocument();
$doc->strictErrorChecking = false;
$doc->loadHTMLFile($htmltmpfilename);
Dann wandle ich den Inhalt zu einem SimpleXMLElement
Code:
$xml = simplexml_import_dom($doc);
Dann suche ich mir das Attribut raus welches geändert werden soll.
Aus dem resultierendem Array explodiere und suche dann nach dem entsprechenden Style Attribut. Hab ich dieses gefunden überschreibe ich den Value des Attributes und gebe es zurück ins Array.
Code:
$picarray = array();
        $picarray = explode(';', $xml->body->div->attributes()->style);
        $tmpArray = array();
        foreach($picarray as $pic)
        {
            if(stristr($pic, 'background-image'))
            {
                foreach($imgarray as $img)
                {
                    $image = explode(':', $pic); 
                    $imgFilename = pathinfo($img);
                    $imgFilename = $imgFilename['filename'];
                    $picname = pathinfo($image[1]);
                    if($picname['filename'] == $imgFilename)
                    {
                        $imgLink = "url('$picname['filename']')";
                        $image[1] = $imgLink;
                        $pic = implode(':', $image);
                    }    
                }   
                
            }
           $tmpArray[] = $pic;
        }
Funktioniert bis hierher auch soweit. Mein Problem ist nun wie bekomme ich dieses Attribut wieder zurück in mein SimpleXMLElement und speichere meine HTML Datei mit den geänderten Werten?

Ich habe es folgendermaßen versucht. Doch das funktioniert so nicht.
Code:
$xml->body->div->addAttribute('style', implode(";", $tmpArray));
$newHtml = dom_import_simplexml($xml); //newHtml ist ein leeres DomElement Objekt.
//Und hier mein Problem wie speichere ich es nun korrekt wieder als HTML Datei
$doc->saveHTMLFile($htmlfilename);
Ich stehe gerade total auf dem Schlauch und komm da nicht weiter.
Weiß zufällig jemand wie ich weiter vorgehen muss?

Besten Dank im voraus für eure Mühe und beste Grüße

CP
 

Duddle

Posting-Frequenz: 14µHz

AW: Pfade im HTML Code via PHP austauschen

Wenn es tatsächlich nur am speichern hängt, dann sollte dir das Beispiel im Handbuch zu dom_import_simplexml() helfen:
PHP:
<?php

$sxe = simplexml_load_string('<books><book><title>blah</title></book></books>');

if ($sxe === false) {
    echo 'Error while parsing the document';
    exit;
}

$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
    echo 'Error while converting XML';
    exit;
}

$dom = new DOMDocument('1.0');
$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $dom->appendChild($dom_sxe);

echo $dom->saveXML();

?>
Natürlich kommt dein $sxe von $xml, du musst also erst ab dom_import_simplexml() lesen, aber das Prinzip ist das gleiche. Diese Funktion gibt ein DOMElement zurück, welches aber die Methode saveXML() nicht kennt. Daher musst du das Element erst an ein neues Dokument / DOMDocument-Objekt anhängen, bevor du letzteres speichern kannst.


Duddle
 

CrazyPlaya

Noch nicht viel geschrieben

AW: Pfade im HTML Code via PHP austauschen

Hi und danke,

sorry zu spöät. Dennoch vielen Dank für deine Mühe aber ich hab es jetzt doch komplett anders und rein Über DOMDocument und Anhang gelöst

siehe:
Code:
$doc = new DOMDocument();
    $doc->loadHTMLFile('test.html');
    $tmpArray = array();
    foreach($doc->getElementsByTagName("div") as $pnode)
    {
        if($pnode->hasAttributes())
        {
            $attrib = $pnode->getAttribute('style');
            $attribArray = explode(';', $attrib);
            if(in_array('background-image', $attribArray))
            {
                foreach($attribArray as $att)
                {
                    if(stristr($att, 'background-image'))
                    {
                        $image = explode(':', $att); 
                        $picname = pathinfo($image[1]);
                        $imgFilename = $picname['filename'].".".$picname['extension'];
                        $imgLink = "url('images/test/".$imgFilename."')";
                        $image[1] = $imgLink;
                        $pic = implode(':', $image);
                        $att = $pic;
                    }
                    $tmpArray[] = $att;
                }
                $attrib = implode (';', $tmpArray);
                $pnode->setAttribute('style', $attrib);
            }
        }
    }
    $doc->saveHTMLFile("result.html");
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.613
Beiträge
1.538.344
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben