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/>

参见

添加注释

用户贡献的注释 1 注释

until-all-bytes-are-free at example dot org
13 年前
我在使用文件中的 DTD 时遇到了问题。它需要相对解析,并且包含导致 DomDocument 无法解析文件的字符。

编码和绝对文件名没有太大帮助。所以我使用了 data:// 流包装器 ( https://php.net/manual/en/wrappers.data.php ) 作为解决方法

<?php

// 相对或绝对文件名
$path = '...';

// 将文件内容转换为文件名
$data = file_get_contents($path);
$systemId = 'data://text/plain;base64,'.base64_encode($data);

// ...

// 创建一个 DOMDocumentType 实例
$dtd = $aImp->createDocumentType('qualified name', '', $systemId);

?>

运行良好。
To Top