Start · Sprachen · PHP · Referenz · xmlwriter_write_dtd_attlist

xmlwriter_write_dtd_attlist

Funktion

Schreibt eine vollständige DTD-Attributlisten-Deklaration (<code>&lt;!ATTLIST ...&gt;</code>) in einen XMLWriter-Stream.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_write_dtd_attlist(XMLWriter $writer, string $name, string $content): bool

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

Typ
bool
Beschreibung
Gibt 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);
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog [ <!ELEMENT book (title, author)> <!ATTLIST book id ID #REQUIRED lang CDATA #IMPLIED> ]>

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();
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE library [ <!ELEMENT book (title, author+)> <!ATTLIST book isbn CDATA #REQUIRED category (fiction|nonfiction) "fiction"> <!ELEMENT author (#PCDATA)> <!ATTLIST author nationality CDATA #IMPLIED> ]>

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