Start · Sprachen · PHP · Referenz · Dom\DocumentType

Dom\DocumentType

Klasse

Repräsentiert den Doctype eines XML- oder HTML-Dokuments und gibt Zugriff auf die zugehörigen Deklarationen wie Name, öffentliche und System-Identifikatoren.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\DocumentType extends Dom\Node

Beschreibung

Dom\DocumentType ist Teil der modernen, namespaced DOM-API, die mit PHP 8.4 eingeführt wurde. Sie repräsentiert den <!DOCTYPE>-Knoten eines Dokuments und implementiert die DOM-Spezifikation für DocumentType. Über dieses Objekt lassen sich Metainformationen des Dokumenttyps wie der Name, der öffentliche Bezeichner (public identifier) und der System-Bezeichner (system identifier) auslesen.

Ein Dom\DocumentType-Objekt wird nicht direkt instanziiert, sondern ist über die Eigenschaft Dom\Document::$doctype zugänglich, wenn ein Dokument geparst wird, das einen Doctype enthält. Es ist ein reines Leseobjekt – die Eigenschaften können nicht nachträglich verändert werden.

Typische Anwendungsfälle sind die Validierung oder Inspektion von HTML- und XML-Dokumenten, bei denen man prüfen möchte, welcher Dokumenttyp deklariert wurde, z. B. ob es sich um ein XHTML-Dokument handelt oder ein reines HTML5-Dokument (das keinen formalen Public-Identifier besitzt).

  • name: Der Name des Dokumenttyps, z. B. html oder root.
  • publicId: Der öffentliche Bezeichner, z. B. -//W3C//DTD XHTML 1.0 Strict//EN.
  • systemId: Der System-Bezeichner, z. B. eine URL zur DTD.

Beispiele

Doctype eines HTML-Dokuments auslesen

<?php
$html = '<!DOCTYPE html><html><head><title>Test</title></head><body></body></html>';

$doc = Dom\HTMLDocument::createFromString($html);
$doctype = $doc->doctype;

if ($doctype !== null) {
    echo 'Name: '      . $doctype->name     . PHP_EOL;
    echo 'PublicId: '  . $doctype->publicId  . PHP_EOL;
    echo 'SystemId: '  . $doctype->systemId  . PHP_EOL;
} else {
    echo 'Kein Doctype vorhanden.' . PHP_EOL;
}
Name: html PublicId: SystemId:

Doctype eines XHTML-Dokuments auslesen

<?php
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head><title>XHTML</title></head>
  <body></body>
</html>';

$doc = Dom\XMLDocument::createFromString($xml);
$doctype = $doc->doctype;

if ($doctype !== null) {
    echo 'Name: '      . $doctype->name     . PHP_EOL;
    echo 'PublicId: '  . $doctype->publicId  . PHP_EOL;
    echo 'SystemId: '  . $doctype->systemId  . PHP_EOL;
}
Name: html PublicId: -//W3C//DTD XHTML 1.0 Strict//EN SystemId: http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd

// Wichtig · Fallstricke

Nur lesend: Die Eigenschaften name, publicId und systemId sind schreibgeschützt. Versuche, sie zu setzen, führen zu einem Fehler.

Neue DOM-API: Dom\DocumentType gehört zur modernen Dom\-Namespace-API (PHP 8.4+) und ist nicht identisch mit dem älteren DOMDocumentType aus der klassischen ext/dom-Erweiterung. Beide Klassen existieren nebeneinander, sind aber nicht kompatibel.

Kein Doctype: Bei Dokumenten ohne Doctype-Deklaration ist Dom\Document::$doctype null – eine Nullprüfung vor dem Zugriff ist daher wichtig.