PHP Conference Japan 2024

DOMImplementation::createDocumentType

(PHP 5, PHP 7, PHP 8)

DOMImplementation::createDocumentType 建立一個空的 DOMDocumentType 物件

說明

public DOMImplementation::createDocumentType(字串 $qualifiedName, 字串 $publicId = "", 字串 $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.dev.org.tw/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