DOMImplementation::createDocumentType

(PHP 5, PHP 7)

DOMImplementation::createDocumentType 空の DOMDocumentType オブジェクトを作成する

説明

public DOMImplementation::createDocumentType ([ string $qualifiedName = NULL [, string $publicId = NULL [, string $systemId = NULL ]]] ) : DOMDocumentType

空の DOMDocumentType オブジェクトを作成します。 エンティティ宣言および記法は使用可能にはなりません。エンティティ参照の 展開やデフォルト属性の追加は発生しません。

パラメータ

qualifiedName

作成されるドキュメント型の修飾名。

publicId

外部サブセットの公開 ID。

systemId

外部サブセットのシステム ID。

返り値

ownerDocumentNULL に設定した 新しい DOMDocumentType ノードを返します。

エラー / 例外

DOM_NAMESPACE_ERR

qualifiedName で指定した名前空間に間違いがある場合に発生します。

このメソッドは、静的にコールすることも できはしますがE_STRICT エラーが発生します。

例1 DTD を添付してドキュメントを作成する

<?php

// DOMImplementation クラスのインスタンスを作成します
$imp = new DOMImplementation;

// DOMDocumentType のインスタンスを作成します
$dtd $imp->createDocumentType('graph''''graph.dtd');

// DOMDocument のインスタンスを作成します
$dom $imp->createDocument(""""$dtd);

// その他のプロパティを設定します
$dom->encoding 'UTF-8';
$dom->standalone false;

// 空の要素を作成します
$element $dom->createElement('graph');

// 要素を追加します
$dom->appendChild($element);

// ドキュメントの内容を出力します
echo $dom->saveXML();

?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE graph SYSTEM "graph.dtd">
<graph/>

参考

add a note add a note

User Contributed Notes 1 note

up
0
until-all-bytes-are-free at example dot org
8 years ago
I had problems to use a DTD from a file. It needed to be resolved relatively and it contained characters that made DomDocument failed to resolve the file.

Encoding and an absolute filename did not help much. So I used the data:// streamwrapper ( http://php.net/manual/en/wrappers.data.php ) as a work-around:

<?php

// relative or absolute filename
$path = '...';

// convert file contents into a filename
$data = file_get_contents($path);
$systemId = 'data://text/plain;base64,'.base64_encode($data);

// ...

// Creates a DOMDocumentType instance
$dtd = $aImp->createDocumentType('qualified name', '', $systemId);

?>

Works like a charm.
To Top