Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting node's text in PHP DOM

Tags:

html

dom

php

xml

How could I extract the string "text" from this markup using the PHP DOM?

<div><span>notthis</span>text</div> 

$div->nodeValue includes "notthis"

like image 506
bgcode Avatar asked Jun 19 '11 01:06

bgcode


2 Answers

You can access DOMText node directly using XPath:

$xpath = new DOMXPath($dom_document); $node = $xpath->query('//div/text()')->item(0); echo $node->textContent; // text 
like image 60
netcoder Avatar answered Sep 23 '22 08:09

netcoder


So long as you can affect the DOM, you could remove that span.

$span = $div->getElementsByTagName('span')->item(0); $div->removeChild($span);  $nodeValue = $div->nodeValue; 

Alternatively, just access the text node of $div.

foreach($div->childNodes as $node) {      if ($node->nodeType != XML_TEXT_NODE) {         continue;     }     $nodeValue = $node; } 

If you end up with more text nodes and only want the first, you can break after the first assignment of $nodeValue.

like image 36
alex Avatar answered Sep 23 '22 08:09

alex