3

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

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

有什么方法可以更改现有 DOMDocument 对象的 doctype 属性?

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

4

2 回答 2

1

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

似乎工作正常 - 更改它会更改 $document->doctype 值和所有内容。虽然它没有记录,并且与 W3 DOM 标准相矛盾,后者说它不应该是可能的(至少在 DOM Level 2 中)。但是很方便知道您可以在 PHP 中做到这一点。

一个缺点是 saveHTML() 不会“看到”新的文档类型,即使 saveXML() 可以。

于 2010-06-23T12:49:19.660 回答
1

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

于 2010-07-06T01:53:40.533 回答