Start · Sprachen · PHP · Referenz · xmlwriter_start_dtd_element

xmlwriter_start_dtd_element

Funktion

Beginnt eine DTD-Elementdeklaration im XML-Dokument mit dem angegebenen qualifizierten Namen.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_start_dtd_element(XMLWriter $writer, string $qualifiedName): bool

Beschreibung

xmlwriter_start_dtd_element() leitet eine DTD-Elementdeklaration (<!ELEMENT ...>) innerhalb einer Document Type Definition (DTD) ein. Die Funktion wird in Kombination mit einer zuvor geöffneten DTD (via xmlwriter_start_dtd()) verwendet und muss mit xmlwriter_end_dtd_element() abgeschlossen werden.

DTD-Elementdeklarationen definieren, welche Inhaltsmodelle für bestimmte XML-Elemente erlaubt sind – z. B. ob ein Element Kindknoten, Text oder gemischten Inhalt enthalten darf. Dies ist sinnvoll, wenn man programmatisch vollständige und valide XML-Dokumente inklusive eingebetteter DTD erzeugen möchte.

Die Funktion ist Teil der prozeduralen API von XMLWriter. Die objektorientierte Entsprechung lautet XMLWriter::startDtdElement(). Nach dem Aufruf können Inhaltsmodell-Details durch nachfolgende XMLWriter-Aufrufe ergänzt werden, bevor die Deklaration mit xmlwriter_end_dtd_element() geschlossen wird.

Zu beachten ist, dass die DTD selbst geöffnet sein muss, bevor DTD-Elementdeklarationen begonnen werden können. Außerdem müssen alle geöffneten DTD-Blöcke korrekt geschlossen werden, damit ein wohlgeformtes XML-Dokument entsteht.

Parameter

Name Typ Default Beschreibung
$writer Pflicht XMLWriter Die aktive XMLWriter-Instanz, auf der die Operation ausgeführt wird.
$qualifiedName Pflicht string Der qualifizierte Name des DTD-Elements, das deklariert werden soll, z. B. 'note' oder 'ns:item'.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn keine DTD geöffnet ist oder der Name ungültig ist).

Beispiele

Einfache DTD-Elementdeklaration erzeugen

<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_start_document($writer, '1.0', 'UTF-8');

// DTD beginnen
xmlwriter_start_dtd($writer, 'note', null, null);

// DTD-Elementdeklaration für 'note'
xmlwriter_start_dtd_element($writer, 'note');
xmlwriter_write_dtd_element($writer, 'note', '(#PCDATA)');
xmlwriter_end_dtd_element($writer);

// DTD beenden
xmlwriter_end_dtd($writer);

// Eigentliches Element
xmlwriter_start_element($writer, 'note');
xmlwriter_text($writer, 'Hallo Welt');
xmlwriter_end_element($writer);

xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (#PCDATA)> ]> <note>Hallo Welt</note>

Komplexeres DTD mit mehreren Elementdeklarationen

<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_start_document($writer, '1.0', 'UTF-8');

xmlwriter_start_dtd($writer, 'catalog', null, null);

// Element 'catalog' enthält ein oder mehrere 'item'-Elemente
xmlwriter_start_dtd_element($writer, 'catalog');
xmlwriter_write_dtd_element($writer, 'catalog', '(item+)');
xmlwriter_end_dtd_element($writer);

// Element 'item' enthält Text
xmlwriter_start_dtd_element($writer, 'item');
xmlwriter_write_dtd_element($writer, 'item', '(#PCDATA)');
xmlwriter_end_dtd_element($writer);

xmlwriter_end_dtd($writer);

xmlwriter_start_element($writer, 'catalog');
  xmlwriter_start_element($writer, 'item');
  xmlwriter_text($writer, 'Produkt A');
  xmlwriter_end_element($writer);
xmlwriter_end_element($writer);

xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE catalog [ <!ELEMENT catalog (item+)> <!ELEMENT item (#PCDATA)> ]> <catalog> <item>Produkt A</item> </catalog>

// Wichtig · Fallstricke

Reihenfolge beachten: xmlwriter_start_dtd_element() darf nur aufgerufen werden, wenn zuvor xmlwriter_start_dtd() aufgerufen und die DTD noch nicht geschlossen wurde. Ein Aufruf außerhalb einer geöffneten DTD führt zu einem Fehler oder erzeugt ungültige Ausgabe.

Paarigkeit: Jeder Aufruf von xmlwriter_start_dtd_element() muss mit einem entsprechenden xmlwriter_end_dtd_element() abgeschlossen werden, da der XMLWriter einen internen Stack verwendet. Vergessene End-Tags führen zu einem malformed Dokument.

In modernen PHP-Versionen (ab 8.0) ist der erste Parameter vom Typ XMLWriter (Objekt), während er in früheren Versionen eine Ressource war.