PHP DOM:更改现有DOMDocument的doctype

时间:2010-06-22 06:42:22

标签: php dom doctype domdocument

使用DOMImplementation::createDocument()创建DOMDocument时,可以将doctype指定为构造函数中的第三个参数。然后,此doctype与文档“绑定”,您可以稍后使用$document->doctype检索它。

但是,这是一个只读属性(与编码和版本不同!)。

有没有办法更改现有DOMDocument对象的doctype属性?

我能想到的唯一解决方法是使用新的doctype创建一个新的DOMDocument,然后导入然后复制旧的内容。

2 个答案:

答案 0 :(得分:1)

事实证明,在PHP中(因此,我想,在libxml中),您可以使用$document->insertBefore()$document->removeChild()等方法,像常规节点一样,将DOMDocumentType对象添加到现有文档中并将其删除。

似乎工作正常 - 更改它会更改$ document-> doctype值和所有内容。但它完全没有文档记录,并且与W3 DOM标准相矛盾,后者认为它不可能(至少在DOM Level 2中)。但是要知道你可以用PHP做到这一点。

一个缺点是saveHTML()没有“看到”新的doctype,即使saveXML()也是如此。

答案 1 :(得分:1)

即使文档已经填充,也可以再次调用$ document-> loadXML()。它会擦除文档并重新生成它,但它是一种在现有对象上更改doctype变量的方法,而新的doctype确实具有HTML表示,这与我的其他解决方案不同。