我正在使用XPath操作一个简短的HTML片段; 当我用$ doc-> saveHTML()输出更改的片段时,DOCTYPE会添加,并且HTML / BODY标签会包装输出.我想删除它们,但只使用DOMDocument函数将所有子项保留在内部.例如:
$doc = new DOMDocument();
$doc->loadHTML('<p><strong>Title...</strong></p>
<a href="http://www....."><img src="http://" alt=""></a>
<p>...to be one of those crowning achievements...</p>');
// manipulation goes here
echo htmlentities( $doc->saveHTML() );
Run Code Online (Sandbox Code Playgroud)
这会产生:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ...>
<html><body>
<p><strong>Title...</strong></p>
<a href="http://www....."><img src="http://" alt=""></a>
<p>...to be one of those crowning achievements...</p>
</body></html>
Run Code Online (Sandbox Code Playgroud)
我尝试了一些简单的技巧,例如:
# removes doctype
$doc->removeChild($doc->firstChild);
# <body> replaces <html>
$doc->replaceChild($doc->firstChild->firstChild, $doc->firstChild);
Run Code Online (Sandbox Code Playgroud)
到目前为止,只删除DOCTYPE并用BODY替换HTML.但是,此时剩下的是body>可变数量的元素.
我如何删除<body>标签但保留其所有子节点,因为它们将以一种干净利落的方式使用PHP的DOM操作进行可变结构化?