1

我有一个接受通用 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>

谢谢。

4

3 回答 3

0

你如何包装你的输出环绕<pre>标签
echo "<pre>" . $matches->item(0)->nodeValue . "</pre>";

于 2010-09-13T13:37:49.017 回答
0

试试这两个!

1

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

2

echo $matches->item(0);

第一个返回此节点及其后代的文本内容,第二个尝试访问魔术方法__toString().. 取决于 DOMDocument 的构建方式,它可能是您已经获得的值。

于 2010-09-13T13:58:06.430 回答
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();
于 2010-09-13T14:25:43.177 回答