Предположим, у меня есть этот код:
<p dataname="description"> Hello this is a description. <a href="#">Click here for more.</a> </p>
Как выбрать nodeValue из p
но исключить a
и его содержимое?
Мой текущий код:
$result = $xpath->query("//p[@dataname='description'][not(self::a)]");
Я выбираю его по $result->item(0)->nodeValue;
Просто добавление / текст () в ваш запрос должно сделать трюк
$result = $xpath->query("//p[@dataname='description'][not(self::a)]/text()");
Непонятно, поддерживает ли XPath XPath это, но этот XPath делает трюк для меня в Scrapy (основанная на Python схема скремблирования):
$xpath->query('//p[@dataname='description']/text()[following-sibling::a]')
Если это не сработает, попробуйте решение Kristoffers, или вы также можете использовать регулярное выражение. Например:
$output = preg_replace("~<.*?>.*?<.*?>~msi", '', $result->item(0)->nodeValue);
Это приведет к удалению любого тега HTML с любым содержимым в нем, за исключением текста, который не инкапсулирован тегами HTML.