(PHP 5)
DOMImplementation::createDocumentType — Creates an empty DOMDocumentType object
$qualifiedName
= NULL
[, string $publicId
= NULL
[, string $systemId
= NULL
]]] )Creates an empty DOMDocumentType object. Entity declarations and notations are not made available. Entity reference expansions and default attribute additions do not occur.
qualifiedName
The qualified name of the document type to create.
publicId
The external subset public identifier.
systemId
The external subset system identifier.
A new DOMDocumentType node with its
ownerDocument set to NULL
.
DOM_NAMESPACE_ERR
Raised if there is an error with the namespace, as determined by
qualifiedName
.
此方法可以被静态调用,但会抛出一个 E_STRICT
错误。
Example #1 Creating a document with an attached DTD
<?php
// Creates an instance of the DOMImplementation class
$imp = new DOMImplementation;
// Creates a DOMDocumentType instance
$dtd = $imp->createDocumentType('graph', '', 'graph.dtd');
// Creates a DOMDocument instance
$dom = $imp->createDocument("", "", $dtd);
// Set other properties
$dom->encoding = 'UTF-8';
$dom->standalone = false;
// Create an empty element
$element = $dom->createElement('graph');
// Append the element
$dom->appendChild($element);
// Retrieve and print the document
echo $dom->saveXML();
?>
以上例程会输出:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE graph SYSTEM "graph.dtd"> <graph/>
until-all-bytes-are-free at example dot org (2011-04-09 04:28:20)
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.