Signatur
Beschreibung
xmlwriter_end_dtd() schließt einen zuvor mit xmlwriter_start_dtd() geöffneten Dokumenttyp-Deklarations-Block (DTD). Die Funktion schreibt das abschließende ]> bzw. > in den internen Puffer des XMLWriter-Objekts.
DTD-Blöcke werden in XML-Dokumenten verwendet, um Elemente, Attribute, Entitäten und Notationen zu deklarieren. Mit der prozeduralen API wird ein XMLWriter-Handle übergeben, während die objektorientierte Variante als Methode XMLWriter::endDtd() aufgerufen wird.
Typischerweise wird xmlwriter_end_dtd() aufgerufen, nachdem alle DTD-Inhalte (z. B. Element- und Attributdeklarationen über xmlwriter_start_dtd_element() usw.) geschrieben wurden. Das korrekte Schließen des DTD-Blocks ist Voraussetzung für ein wohlgeformtes und valides XML-Dokument.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $writer Pflicht | XMLWriter | Das XMLWriter-Objekt (Handle), das zuvor mit xmlwriter_open_memory() oder xmlwriter_open_uri() erstellt wurde und einen offenen DTD-Block besitzt. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn kein DTD-Block geöffnet ist).Beispiele
Einfache DTD mit Element-Deklaration schreiben
<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, ' ');
// XML-Deklaration
xmlwriter_start_document($writer, '1.0', 'UTF-8');
// DTD öffnen
xmlwriter_start_dtd($writer, 'note', null, null);
// Element innerhalb der DTD deklarieren
xmlwriter_start_dtd_element($writer, 'note');
xmlwriter_write_attribute($writer, '', '(to,from,heading,body)');
xmlwriter_end_dtd_element($writer);
// DTD schließen
xmlwriter_end_dtd($writer);
// Root-Element
xmlwriter_start_element($writer, 'note');
xmlwriter_write_element($writer, 'to', 'Anna');
xmlwriter_write_element($writer, 'from', 'Max');
xmlwriter_end_element($writer);
xmlwriter_end_document($writer);
echo xmlwriter_output_memory($writer);
DTD mit externer Systemkennung (objektorientiert)
<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->setIndent(true);
$writer->setIndentString(' ');
$writer->startDocument('1.0', 'UTF-8');
// DTD mit Public- und System-Identifier
$writer->startDtd('html', '-//W3C//DTD XHTML 1.0 Strict//EN',
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');
// DTD schließen (keine internen Deklarationen)
$writer->endDtd();
$writer->startElement('html');
$writer->writeAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
$writer->endElement();
$writer->endDocument();
echo $writer->outputMemory();
// Wichtig · Fallstricke
Wichtig: xmlwriter_end_dtd() muss immer nach einem entsprechenden xmlwriter_start_dtd() aufgerufen werden. Ein fehlender Abschluss führt zu einem ungültigen XML-Dokument. Die Funktion gibt false zurück, wenn kein DTD-Block offen ist.
Ab PHP 8.0 ist das erste Argument zwingend ein XMLWriter-Objekt. In früheren Versionen wurde ein Ressource-Handle übergeben. Die objektorientierte Schreibweise $writer->endDtd() ist die bevorzugte Alternative zur prozeduralen API.