我有一个接受一般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>
感谢。
答案 0 :(得分:0)
如何包装输出<pre>
标签echo "<pre>" . $matches->item(0)->nodeValue . "</pre>";
答案 1 :(得分:0)
尝试给这两个去吧!
echo $matches->item(0)->textContent;
echo $matches->item(0);
第一个返回此节点及其后代的文本内容,第二个尝试访问魔术方法__toString()
..根据DOMDocument的构建方式,它可能是您已经获得的值
答案 2 :(得分:0)
这将有效,但没有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();