Я проверял следующее на своем локальном хосте.Я создал файл с именем DOM_with_comment.html
, содержащий:
<a>
<div>
<div>
<span>
text node 1<br>
text node 2 <!--//comments-->
</span>
</div>
</div>
</a>
Когда я запускаю:
<?php
$doc = new DOMDocument;
libxml_use_internal_errors(true);
$doc->preserveWhiteSpace = false;
$doc->loadHTMLFile('DOM_with_comment.html');
$xpath = new DOMXPath($doc);
echo "<pre>";
foreach ($xpath->query('//a/div/div/span/text()') as $item) {
var_dump($item->nodeValue);
}
Выходные данные:
string(29) "
text node 1"
string(31) "
text node 2 "
string(14) "
"
Таким образом, при обращении к первому квалифицируемому результату [0]
из вашего запроса xpath с последующим отображением trim()
ed ->nodeValue()
с var_export()
обнаруживается, что по обе стороны целевой подстроки нет комментариев или пробелов.
var_export(trim($xpath->query('//a/div/div/span/text()[2]')[0]->nodeValue));
// outputs: 'text node 2'
ps Если вы вводите не файл, а переменную, это работает так же:
$html = <<<HTML
<a>
<div>
<div>
<span>
text node 1<br>
text node 2 <!--//comments-->
</span>
</div>
</div>
</a>
HTML;
$doc->loadHTML($html);