PHPCon Poland 2024

DOMImplementation::createDocumentType

(PHP 5, PHP 7, PHP 8)

DOMImplementation::createDocumentType Создаёт пустой объект класса DOMDocumentType

Описание

public DOMImplementation::createDocumentType(string $qualifiedName, string $publicId = "", string $systemId = ""): DOMDocumentType|false

Создаёт пустой объект класса DOMDocumentType. Объявления сущностей и обозначения будут недоступны. Ссылки на сущности не будут заменяться и добавления атрибутов по умолчанию не будут происходить.

Список параметров

qualifiedName

Квалифицированное имя типа документа для создания.

publicId

Общедоступный идентификатор внешнего подмножества.

systemId

Системный идентификатор внешнего подмножества.

Возвращаемые значения

Новый объект класса DOMDocumentType с атрибутом ownerDocument, установленным в null или false в случае возникновения ошибки.

Ошибки

DOM_NAMESPACE_ERR

Возникает, если обнаружена ошибка в строке qualifiedName.

Список изменений

Версия Описание
8.0.0 При статическом вызове функции теперь будет выбрасываться ошибка Error. Ранее выдавалась ошибка уровня E_DEPRECATED.

Примеры

Пример #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

User Contributed Notes 1 note

up
0
until-all-bytes-are-free at example dot org
13 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