Я хочу извлечь содержимое узла в виде строки, используя XPath и PHP

У меня есть функция, которая принимает общий файл HTML и общее выражение XPath. Я хочу извлечь строку из соответствующего узла, содержащую весь текст, включая теги HTML. Вот упрощенный пример...

<?php
$inDocStg = "
    <html><body>
    <div>The best-laid<br> schemes o' <span>mice</span> an' men
        <img src='./mouse.gif'><br>
    </div>
    </body></html>
    ";

$xPathDom = new DOMDocument();
@$xPathDom->loadHTML( $inDocStg );
$xPath = new DOMXPath( $xPathDom );
$matches = $xPath->query( "//div" );
echo $matches->item(0)->nodeValue;
?>

Это производит (я смотрю на сгенерированный источник HTML - не вывод браузера)...

The best-laid schemes o' mice an' men

(теги HTML были удалены).

Но то, что я хочу, это...

The best-laid<br> schemes o' <span>mice</span> an' men<img src='./mouse.gif'><br>

Благодарю.

3 ответа

Как насчет вас обернуть выходной Arround <pre> теги
echo "<pre>" . $matches->item(0)->nodeValue . "</pre>";

Это будет работать, но без XPath;

$xPathDom = new DOMDocument();
$xPathDom->loadHTML( $inDocStg );
echo $xPathDom->saveXML($xPathDom->getElementsByTagName('div')->item(0));

или же

$xPathDom = new DOMDocument();
$xPathDom->loadHTML( $inDocStg );
$xPathDom->getElementsByTagName('div')->item(0);
echo $xPathDom->saveHTML();

Попробуйте дать этим 2 идти!

1

echo $matches->item(0)->textContent;

2

echo $matches->item(0);

Первый возвращает текстовое содержимое этого узла и его потомков, а второй пытается получить доступ к магическому методу. __toString().. в зависимости от того, как построен DOMDocument, это может быть значение, которое вы уже получаете.

Другие вопросы по тегам