将DOM元素的一部分转换为带有HTML标记的字符串

19

我需要将DOM元素的一部分转换为包含HTML标签的字符串。

我尝试了以下方法,但它只打印出不带标签的文本:

$dom = new DOMDocument();
$dom->loadHTMLFile('http://www.pixmania-pro.co.uk/gb/uk/08920684/art/packard-bell/easynote-tm89-gu-015uk.html');
$xpath = new DOMXPath($dom);
$elements=xpath->query('//table');

foreach($elements as $element)
echo $element->nodeValue;

我希望保留所有标签和表格内部的内容。能否有人帮助我。这将是一次巨大的帮助。

谢谢。

2个回答

56

当前解决方案:

foreach($elements as $element){
    echo $dom->saveHTML($element);
}

旧答案(php < 5.3.6):

  1. 创建一个新的 DomDocument 实例
  2. 克隆您希望保存为 HTML 的节点(包括所有子节点)
  3. 将克隆的节点导入到新的 DomDocument 实例中,并将其附加为子节点
  4. 将新实例保存为 html

像这样:

foreach($elements as $element){
    $newdoc = new DOMDocument();
    $cloned = $element->cloneNode(TRUE);
    $newdoc->appendChild($newdoc->importNode($cloned,TRUE));
    echo $newdoc->saveHTML();
}

哦,谢谢dev-null-dweller,这正是我所需的。这节省了很多时间。再次感谢你。 - dakshina11
1
谢谢你,你真的很有用 :D - AmirModiri
1
请注意,对于更新的PHP版本,请参考下面@dennis的答案。 - Wrikken
我在我的端口进行测试,似乎如果您将$element项目放入importNode方法中而不是像您所做的那样放置'$cloned'项目,则'$cloned = $element->cloneNode(TRUE);'行是不必要的。 - David

28

使用PHP 5.3.6或更高版本,您可以在DOMDocument::saveHTML中使用节点:

foreach($elements as $element){
    echo $dom->saveHTML($element);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接