php - parser - Simple HTML Dom: ¿Cómo eliminar elementos?
php simple html dom parser download (6)
Me gustaría utilizar DOM de HTML simple para eliminar todas las imágenes de un artículo, así puedo crear fácilmente un pequeño fragmento de texto para un teletipo de noticias, pero no he descubierto cómo eliminar elementos con él.
Básicamente lo haría
- Obtener contenido como cadena de HTML
- Eliminar todas las etiquetas de imagen del contenido
- Limitar el contenido a x palabras
- Salida.
¿Alguna ayuda?
Creo que tienes algunas dificultades porque olvidaste guardar (volcar el árbol DOM interno en la cadena).
Prueba esto:
$html = file_get_html("http://example.com");
foreach($html ->find(''img'') as $item) {
$item->outertext = '''';
}
$html->save();
echo $html;
Esto es trabajo para mí:
foreach($html->find(''element'') as $element){
$element = NULL;
}
Las supuestas soluciones son bastante costosas y prácticamente inutilizables en un gran bucle u otro tipo de repetición.
Prefiero usar "eliminaciones suaves":
foreach($html->find(''somecondition''),$item){
if (somecheck) $item->setAttribute(''softDelete'', true); //<= set marker to check in further code
$item->outertext='''';
foreach($foo as $bar){
if(!baz->getAttribute(''softDelete''){
//do something
}
}
}
No hay métodos dedicados para eliminar elementos. Acabas de encontrar todos los elementos img y luego haces
$e->outertext = '''';
No pude encontrar dónde poner la función, así que puse lo siguiente directamente en mi código:
$html->load($html->save());
Básicamente bloquea los cambios realizados en el bucle for de nuevo en el html por encima.
cuando solo elimina el texto externo, elimina el contenido HTML en sí, pero si realiza otro hallazgo en los mismos elementos, aparecerá en el resultado. la razón es que el objeto HTML DOM simple todavía tiene su estructura interna del elemento, solo que sin su contenido real. lo que necesita hacer para eliminar realmente el elemento es simplemente volver a cargar el HTML como una cadena a la misma variable. de esta forma, el objeto se recreará sin el contenido eliminado, y el objeto HTML DOM simple se construirá sin él.
aquí hay una función de ejemplo:
public function removeNode($selector)
{
foreach ($this->find($selector) as $node)
{
$node->outertext = '''';
}
$this->load($this->save());
}
pon esta función dentro de la clase simple_html_dom y estás bien.