没有DTD、head和body标记的PHP文档?

没有DTD、head和body标记的PHP文档?,php,domdocument,doctype,Php,Domdocument,Doctype,是否可以使用DOMDocument类而不允许它添加文档类型声明、head和body标记?我正在为服务器端的include编写当前代码,并在一个格式良好的页面上呈现。我不需要额外的标记。自从PHP5.3.6以来,您可以在中使用节点,在此之前,我滥用了->saveXML(),并进行了一些小的修复。但是,您必须有一个周围包含的节点(例如,输出是…somecontent和nodex…),或者如果您不想有一个周围标记,则循环遍历节点子节点 $html = ''; foreach($rootnode->

是否可以使用DOMDocument类而不允许它添加文档类型声明、head和body标记?我正在为服务器端的include编写当前代码,并在一个格式良好的页面上呈现。我不需要额外的标记。

自从PHP5.3.6以来,您可以在中使用节点,在此之前,我滥用了
->saveXML()
,并进行了一些小的修复。但是,您必须有一个周围包含的节点(例如,输出是
…somecontent和nodex…
),或者如果您不想有一个周围标记,则循环遍历节点子节点

$html = '';
foreach($rootnode->childNodes as $node){
    $html .= $rootnode->ownerdocument->saveHTML($node);
}

从PHP 5.3.6开始,您可以在中使用节点,在此之前,我对
->saveXML()
进行了一些小的修改。但是,您必须有一个包含在周围的节点(例如,输出是
…somecontent和nodex…
),或者如果您不想有一个周围的标记,则循环遍历节点子节点

$html = '';
foreach($rootnode->childNodes as $node){
    $html .= $rootnode->ownerdocument->saveHTML($node);
}

@Wrikken所说的,或者对于PHP<5.3.6,只需使用正则表达式:

$html = preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML());
$html=preg\u replace('~]*>\s*~i',''$dom->saveHTML());

Wrikken说了什么,或者,对于PHP<5.3.6,只需使用正则表达式:

$html = preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML());
$html=preg\u replace('~]*>\s*~i',''$dom->saveHTML());

我喜欢这个想法,但不知道如何从使用DOMDocument转换为节点。我是否必须循环使用document变量并将我想保留的每个部分转换为单独的节点?如果是这样,我如何使用您的方法将多个节点保存到HTML文档中?使用任何希望检索节点的DOM函数,但很可能,您需要
标记的内容,因此可能需要
$rootnode=$dom->getELementsByTagName('body')->项(0);
。其他选项包括使用
DOMXPath
->getElementById()单步执行
->childNodes
,等等。看起来似乎您不能独立于文档使用DOM元素。如果您无法从文档中删除这些项目,那么该如何工作?为什么您需要从文档中删除它们?我唯一需要做的是在回显(X)时HTML/XML字符串,在这一点上可以。您想要实现什么需要“分离”节点?嗯,我现在想您可能认为您无法将节点“插入”到另一个文档中。这在
->importNode()中是完全可能的
,因此更深入的功能不需要“了解”您的“主”文档。我喜欢这个想法,但想知道如何从使用DOMDocument转到节点。是否必须循环使用文档变量并将希望保留的每个部分转换为单独的节点?如果是这样,我如何使用您的方法将多个节点保存到HTML document?使用任何要检索节点的DOM函数,但很可能需要
标记的内容,因此可能需要
$rootnode=$DOM->getELementsByTagName('body')->项(0);
。其他选项包括使用
DOMXPath
->getElementById()单步执行
->childNodes
,等等。看起来似乎您不能独立于文档使用DOM元素。如果您无法从文档中删除这些项目,那么该如何工作?为什么您需要从文档中删除它们?我唯一需要做的是在回显(X)时HTML/XML字符串,在这一点上可以。您想要实现什么需要“分离”节点?嗯,我现在想您可能认为您无法将节点“插入”到另一个文档中。这在
->importNode()中是完全可能的
,因此更深层的功能不需要“了解”您的“主”文档。
LIBXML\u HTML\u NODEFDTD
在我的环境中不起作用。Alix的答案是解决此问题的正确方法。
LIBXML\u HTML\u NODEFDTD
在我的环境中不起作用。Alix的答案是解决此问题的正确方法。Pos可能重复可复制的