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.

  1. $dom = new DOMDocument;
  2. $dom->loadHTML( $htmlString );
  3. $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:

  1. $dom = new DOMDocument;
  2. $dom->loadHTMLFile( ‘exemple.html’ );
  3. $xPath = new DOMXPath( $dom );

Un cop fet això si volem podem obtenir tots els nodes que siguin imatges de la següent manera:

  1. $images = $xml->xpath( ‘//img’ );

Per a poder, en aquest cas esborrar els nodes obtinguts:

  1. foreach ($images as $node) {
  2. $node->parentNode->removeChild($node);
  3. }

Un cop acabat el bucle caldria guardar el DOM a la variable o el fitxer en qüestió:

  1. $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:

  1. $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.

Tags: ,

Articles relacionats

Mozilla presenta WebAPI

OOCSS (2a part), profunditzant en els widgets

La setmana a Twitter

OOCSS, Object-Oriented CSS

Different Post Per Page de WordPress