php - ejemplo - Seleccione nodeValue pero excluya elementos secundarios
php dom node (2)
Digamos que tengo este código:
<p dataname="description">
Hello this is a description. <a href="#">Click here for more.</a>
</p>
¿Cómo selecciono el nodeValue de p
pero excluyo a
y su contenido?
Mi código actual:
$result = $xpath->query("//p[@dataname=''description''][not(self::a)]");
Lo selecciono por $result->item(0)->nodeValue;
No estoy seguro de si XPath de PHP es compatible con esto, pero este XPath me hace el truco en Scrapy (framework de scraping basado en Python):
$xpath->query(''//p[@dataname=''description'']/text()[following-sibling::a]'')
Si esto no funciona, pruebe la solución de Kristoffers, o también podría usar una solución de expresiones regulares. Por ejemplo:
$output = preg_replace("~<.*?>.*?<.*?>~msi", '''', $result->item(0)->nodeValue);
Esto eliminará cualquier etiqueta HTML con contenido, sin incluir texto que no esté encapsulado en etiquetas HTML.
Simplemente agregando / texto () a su consulta debería hacer el truco
$result = $xpath->query("//p[@dataname=''description''][not(self::a)]/text()");