3

で DOMDocument を作成する場合DOMImplementation::createDocument()、コンストラクターの 3 番目の引数として doctype を指定できます。この Doctype はドキュメントに「関連付け」られ、後で .xml を使用して取得できます$document->doctype

ただし、これは読み取り専用の属性です (エンコーディングやバージョンとは異なります!)。

既存の DOMDocument オブジェクトの doctype プロパティを変更する方法はありますか?

私が考えることができる唯一の回避策は、新しいDoctypeで新しいDOMDocumentを作成し、古いものからコンテンツをインポートしてコピーすることです。

4

2 に答える 2

1

ドキュメントがすでに入力されている場合でも、$ document-> loadXML()を再度呼び出すことも可能です。ドキュメントをワイプして再生成しますが、これは既存のオブジェクトのdoctype変数を変更する方法であり、他のソリューションとは異なり、新しいdoctypeにはHTML表現があります。

于 2010-07-06T01:53:40.533 に答える
1

PHP (したがって、おそらく libxml) では、 や などのメソッドを使用して、通常のノードと同様に、DOMDocumentType オブジェクトを既存のドキュメントに追加および削除できることがわかりまし$document->insertBefore()$document->removeChild()

正常に動作しているようです - 変更すると $document->doctype の値とすべてが変更されます。ただし、これはまったく文書化されておらず、(少なくとも DOM レベル 2 では) 可能ではないという W3 DOM 標準と矛盾しています。ただし、PHP で実行できることを知っておくと便利です。

欠点の 1 つは、saveXML() は新しい doctype を認識しますが、saveHTML() は新しい doctype を認識しないことです。

于 2010-06-23T12:49:19.660 に答える