Start · Sprachen · PHP · Referenz · xmlwriter_end_dtd

xmlwriter_end_dtd

Funktion

Beendet den aktuellen DTD-Block im XML-Dokument und schreibt das schließende <code>]&gt;</code>-Tag.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_end_dtd(XMLWriter $writer): bool

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

Typ
bool
Beschreibung
Gibt 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);
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> ]> <note> <to>Anna</to> <from>Max</from> </note>

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();
<?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"/>

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