Я хочу извлечь содержимое узла в виде строки, используя 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, это может быть значение, которое вы уже получаете.