Я хочу извлечь содержимое узла в виде строки, используя XPath и PHP - PullRequest
1 голос
/ 13 сентября 2010

У меня есть функция, которая принимает общий 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 ]

0 голосов
/ 13 сентября 2010

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

1

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

2

echo $matches->item(0);

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

0 голосов
/ 13 сентября 2010

Это будет работать, но без 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();
0 голосов
/ 13 сентября 2010

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

...