Signatur
Beschreibung
xmlwriter_end_dtd_element() schließt eine DTD-Element-Deklaration (<!ELEMENT ... >), die zuvor mit xmlwriter_start_dtd_element() geöffnet wurde. Die Funktion gehört zur prozeduralen Schnittstelle der XMLWriter-Erweiterung und wirkt zusammen mit den verwandten DTD-Funktionen für das Erstellen vollständiger Document-Type-Definitionen.
DTD-Element-Deklarationen definieren, welche Kind-Elemente und welchen Inhaltstyp ein XML-Element besitzen darf. Nachdem alle Inhaltsmodell-Angaben (z. B. über xmlwriter_write_dtd_element()) eingefügt wurden, muss die Deklaration mit dieser Funktion formal abgeschlossen werden.
Die Funktion gibt true zurück, wenn das Schließen erfolgreich war, und false, wenn kein entsprechendes Element geöffnet ist oder ein anderer Fehler aufgetreten ist. Sie sollte stets nach Abschluss jeder DTD-Element-Deklaration aufgerufen werden, um wohlgeformte DTD-Strukturen sicherzustellen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $writer Pflicht | XMLWriter | Die XMLWriter-Instanz, auf der die DTD-Element-Deklaration beendet werden soll. Sie muss zuvor mit xmlwriter_open_memory() oder xmlwriter_open_uri() erzeugt worden sein. |
Rückgabewert
true zurück, wenn die DTD-Element-Deklaration erfolgreich geschlossen wurde, oder false bei einem Fehler (z. B. wenn kein passendes xmlwriter_start_dtd_element() vorausgegangen ist).Beispiele
Einfache DTD-Element-Deklaration erstellen
<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, ' ');
// DOCTYPE-Bereich starten
xmlwriter_start_dtd($writer, 'root', null, null);
// DTD-Element-Deklaration für das Root-Element
xmlwriter_start_dtd_element($writer, 'root');
xmlwriter_text($writer, '(title, body)');
xmlwriter_end_dtd_element($writer); // Beendet die Element-Deklaration
// DTD-Element-Deklaration für title
xmlwriter_start_dtd_element($writer, 'title');
xmlwriter_text($writer, '(#PCDATA)');
xmlwriter_end_dtd_element($writer);
// DTD-Element-Deklaration für body
xmlwriter_start_dtd_element($writer, 'body');
xmlwriter_text($writer, '(#PCDATA)');
xmlwriter_end_dtd_element($writer);
xmlwriter_end_dtd($writer);
echo xmlwriter_output_memory($writer);
Objektorientierte Variante mit XMLWriter-Klasse
<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->setIndent(true);
$writer->setIndentString(' ');
$writer->startDtd('katalog', null, null);
// Element 'katalog' mit Kind-Element 'artikel'
$writer->startDtdElement('katalog');
$writer->text('(artikel+)');
$writer->endDtdElement(); // entspricht xmlwriter_end_dtd_element()
// Element 'artikel' mit gemischtem Inhalt
$writer->startDtdElement('artikel');
$writer->text('(#PCDATA|name|preis)*');
$writer->endDtdElement();
$writer->endDtd();
$writer->startDocument('1.0', 'UTF-8');
$writer->endDocument();
echo $writer->outputMemory();
// Wichtig · Fallstricke
Wichtig: xmlwriter_end_dtd_element() muss immer paarweise mit xmlwriter_start_dtd_element() verwendet werden. Ein fehlendes Ende einer DTD-Element-Deklaration führt zu einer ungültigen DTD-Struktur und kann dazu führen, dass das gesamte Dokument nicht wohlgeformt ist.
Für einfache, einzeilige Element-Deklarationen ohne weiteren Inhalt kann die Hilfsfunktion xmlwriter_write_dtd_element() verwendet werden, die Start und Ende in einem einzigen Aufruf zusammenfasst und dadurch kompakteren Code ermöglicht.