Esborrar nodes del DOM en PHP
En alguns casos, podem necessitar a partir d’un fitxer o d’un string que conté HTML, poder-ne fer modificacions, pertinents. En aquest post veurem com carregar aquest contingut en un objecte, validant-ne l’estructura. A partir d’aquí es poden fer consultes, per a obtenir els nodes desitjats i a partir d’aquí fer-ne les modificacions corresponents, en aquest cas esborrar.
- $dom = new DOMDocument;
- $dom->loadHTML( $htmlString );
- $xPath = new DOMXPath( $dom );
En aquest cas, el contingut està en una variable anomenada $htmlString. En el cas que volem obtenir el contingut d’un fitxer podem fer-ho amb loadHTMLFIle:
- $dom = new DOMDocument;
- $dom->loadHTMLFile( ‘exemple.html’ );
- $xPath = new DOMXPath( $dom );
Un cop fet això si volem podem obtenir tots els nodes que siguin imatges de la següent manera:
- $images = $xml->xpath( ‘//img’ );
Per a poder, en aquest cas esborrar els nodes obtinguts:
- foreach ($images as $node) {
- $node->parentNode->removeChild($node);
- }
Un cop acabat el bucle caldria guardar el DOM a la variable o el fitxer en qüestió:
- $htmlString = $dom->saveHTML();
En el cas que hi usem un fitxer podem usar saveHTMLFile. El retorn d’aquesta funció en aquest cas no és el contingut sinó el nombre de Bytes escrits:
- $doc->saveHTMLFile(“exemple.html”)
Aquest mateix codi també es podria fer amb expressions regulars, i podríem obtenir uns resultats semblants, però amb un codi molt menys entenedor i més propens a bugs.
Articles relacionats
OOCSS (2a part), profunditzant en els widgets
Different Post Per Page de WordPress