PHP DOM: изменить тип документа существующего DOMDocument - PullRequest
2 голосов
/ 22 июня 2010

При создании документа DOMDocument с DOMImplementation::createDocument() вы можете указать тип документа в качестве третьего аргумента в конструкторе. Этот тип документа затем «привязывается» к документу, и вы можете получить его позже с помощью $document->doctype.

Однако это атрибут только для чтения (в отличие от кодировки и версии!).

Есть ли способ изменить свойство doctype существующего объекта DOMDocument?

Единственный обходной путь, о котором я могу подумать, - это создать новый DOMDocument с новым типом документа, а затем импортировать и скопировать содержимое старого.

Ответы [ 2 ]

1 голос
/ 06 июля 2010

Также представляется возможным снова вызвать $ document-> loadXML (), даже если документ уже заполнен.Он стирает документ и регенерирует его, но это способ изменения переменной doctype для существующего объекта, и новый doctype действительно имеет представление HTML в отличие от моего другого решения.

1 голос
/ 23 июня 2010

Оказывается, что в PHP (и, следовательно, в libxml) вы можете добавлять и удалять объекты DOMDocumentType в существующий документ, как обычные узлы, используя такие методы, как $document->insertBefore() и $document->removeChild() и т. Д.

Кажется, работает нормально - изменение его приводит к изменению значения $ document-> doctype и всего остального.Это довольно недокументировано, хотя и противоречит стандарту W3 DOM, который говорит, что это не должно быть возможно (по крайней мере, в DOM Level 2).Но удобно знать, что вы можете сделать это в PHP.

Один недостаток - saveHTML () не «видит» новый тип документа, хотя saveXML () делает.

...