Signatur
Beschreibung
xmlwriter_write_dtd_attlist() erzeugt und schreibt eine komplette DTD-Attributlisten-Deklaration in einem einzigen Schritt. Eine <!ATTLIST>-Deklaration definiert die erlaubten Attribute eines XML-Elements inklusive ihrer Typen und Standardwerte und ist Bestandteil einer eingebetteten oder externen DTD.
Im Gegensatz zu xmlwriter_start_dtd_attlist() und xmlwriter_end_dtd_attlist(), die den Inhalt der Deklaration schrittweise aufbauen, schreibt diese Funktion alles auf einmal. Sie eignet sich daher besonders dann, wenn der vollständige Inhalt der Attributliste bereits als String vorliegt.
Die Funktion muss innerhalb einer DTD-Sektion aufgerufen werden, d.h. nachdem xmlwriter_start_dtd() oder xmlwriter_write_dtd() bzw. eine interne DTD-Subset-Eröffnung stattgefunden hat. Der Parameter name gibt den Elementnamen an, für den die Attribute deklariert werden, und content enthält den eigentlichen Deklarationsinhalt.
Diese Funktion ist Teil der prozeduralen XMLWriter-API. In der objektorientierten Variante steht die Methode XMLWriter::writeDtdAttlist() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $writer Pflicht | XMLWriter | Die XMLWriter-Instanz, in die geschrieben wird. Wird mit xmlwriter_open_memory() oder xmlwriter_open_uri() erzeugt. |
|
| $name Pflicht | string | Der Name des XML-Elements, für das die Attributliste deklariert wird (z. B. 'book'). |
|
| $content Pflicht | string | Der Inhalt der Attributlisten-Deklaration, also die Attributdefinitionen selbst (z. B. 'id ID #REQUIRED lang CDATA #IMPLIED'). |
Rückgabewert
true bei Erfolg zurück, false im Fehlerfall (z. B. wenn kein aktiver DTD-Kontext vorhanden ist).Beispiele
Einfache DTD-Attributliste mit xmlwriter_write_dtd_attlist()
<?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-Sektion starten
xmlwriter_start_dtd($writer, 'catalog');
// Elementdeklaration
xmlwriter_write_dtd_element($writer, 'book', '(title, author)');
// Attributliste für das Element 'book'
xmlwriter_write_dtd_attlist(
$writer,
'book',
'id ID #REQUIRED lang CDATA #IMPLIED'
);
// DTD beenden
xmlwriter_end_dtd($writer);
// Dokument beenden
xmlwriter_end_document($writer);
echo xmlwriter_output_memory($writer);
Objektorientierte Variante mit XMLWriter::writeDtdAttlist()
<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->setIndent(true);
$writer->setIndentString(' ');
$writer->startDocument('1.0', 'UTF-8');
$writer->startDtd('library');
// Mehrere Elemente mit eigenen Attributlisten
$writer->writeDtdElement('book', '(title, author+)');
$writer->writeDtdAttlist('book', 'isbn CDATA #REQUIRED category (fiction|nonfiction) "fiction"');
$writer->writeDtdElement('author', '(#PCDATA)');
$writer->writeDtdAttlist('author', 'nationality CDATA #IMPLIED');
$writer->endDtd();
$writer->endDocument();
echo $writer->outputMemory();
// Wichtig · Fallstricke
Kontext: Die Funktion muss innerhalb einer geöffneten DTD-Sektion aufgerufen werden. Ein Aufruf außerhalb führt zu false als Rückgabewert, ohne eine PHP-Warnung auszulösen – der Rückgabewert sollte daher stets geprüft werden.
Inhalt prüfen: Der content-Parameter wird nicht von PHP selbst auf XML-Konformität validiert. Ungültiger DTD-Inhalt führt zu fehlerhaftem XML-Output, der durch XML-Parser (z. B. DOMDocument::validate()) erst später auffällt.
Veraltete Prozedur-API: In PHP 8.0+ wird die objektorientierte Variante (XMLWriter::writeDtdAttlist()) bevorzugt. Die prozedurale API ist weiterhin funktionsfähig, aber weniger idiomatisch.