使用DOMImplementation::createDocument()
创建DOMDocument时,可以将doctype指定为构造函数中的第三个参数。然后,此doctype与文档“绑定”,您可以稍后使用$document->doctype
检索它。
但是,这是一个只读属性(与编码和版本不同!)。
有没有办法更改现有DOMDocument对象的doctype属性?
我能想到的唯一解决方法是使用新的doctype创建一个新的DOMDocument,然后导入然后复制旧的内容。
答案 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表示,这与我的其他解决方案不同。