Код DOM
работает как положено.<span>
не имеет текстового узла:
<span
id="ctl00_ctl00_contentPlaceHolder_…_msgTextBody"
class="msgBody"
style="color:#525B64;"></span>
DOMNodeList
, возвращенный вашим XPath, будет пустым.Если вы удалите тест /text()
, он будет содержать DOMElement
для <span>
, который будет возвращать пустую строку для nodeValue
.
Текст, который вы пытаетесь проанализировать, вставляется с помощью JavaScript на стороне клиента после страница была передана вашему браузеру.Этого не происходит при извлечении страницы с DOM
, поскольку DOM
не является интерпретатором JavaScript.
Сообщения, которые вы ищете, находятся в блоке <script>
.Вы можете проанализировать этот блок и попытаться извлечь его с помощью регулярного выражения, например,
$xp = new DOMXpath($dom);
$nodes = $xp->query('//script[contains(., "var messages")]');
preg_match_all(
'~var messages = (.*\]);~',
$nodes->item(0)->nodeValue,
$messages);
$messages = json_decode($messages[1][0]);
var_dump($messages);
Выше было бы проанализировать и декодировать JavaScript в массив объектов PHP, к которому вы затем можете получить доступ с помощью $message->MessageText
.
См. http://codepad.viper -7.com / R985hm