query node ejemplo php xml dom xpath domdocument

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()");