Start · Sprachen · PHP · Referenz · xmlwriter_write_pi

xmlwriter_write_pi

Funktion

Schreibt eine vollständige XML-Verarbeitungsvorschrift (Processing Instruction) als einzelnen Schritt in den <code>XMLWriter</code>-Puffer.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_write_pi(XMLWriter $writer, string $target, string $content): bool

Beschreibung

Eine XML-Verarbeitungsvorschrift (engl. Processing Instruction, kurz PI) ist ein spezielles XML-Konstrukt der Form <?target content?>, das Anweisungen für eine bestimmte Anwendung oder einen Parser enthält. Bekannte Beispiele sind <?xml-stylesheet type="text/css" href="style.css"?> oder PHP-eigene PIs in älteren Architekturen.

xmlwriter_write_pi kombiniert intern die Schritte xmlwriter_start_pi, Inhalt schreiben und xmlwriter_end_pi in einem einzigen Aufruf. Das ist praktisch, wenn der gesamte Inhalt der PI bereits als String vorliegt und keine schrittweise Befüllung nötig ist.

Die Funktion ist Teil der prozeduralen API von XMLWriter. Die objektorientierte Entsprechung lautet $writer->writePi($target, $content). Sie eignet sich überall dort, wo ein wohlgeformtes XML-Dokument programmatisch erzeugt werden soll und Metadaten oder Verarbeitungshinweise eingebettet werden müssen.

Der Rückgabewert ist true bei Erfolg, andernfalls false. Ein Fehler tritt z. B. auf, wenn der angegebene $target-String keinen gültigen XML-Namen darstellt.

Parameter

Name Typ Default Beschreibung
$writer Pflicht XMLWriter Die XMLWriter-Instanz, in deren Ausgabepuffer die Verarbeitungsvorschrift geschrieben wird.
$target Pflicht string Der Zielname der Verarbeitungsvorschrift, z. B. xml-stylesheet oder php. Muss ein gültiger XML-Name sein.
$content Pflicht string Der Inhalt der Verarbeitungsvorschrift, d. h. alles, was zwischen dem Zielnamen und dem schließenden ?> steht.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Verarbeitungsvorschrift erfolgreich in den Puffer geschrieben wurde, andernfalls false.

Beispiele

XML-Stylesheet-Verarbeitungsvorschrift einfügen

<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->startDocument('1.0', 'UTF-8');

// Stylesheet-Verarbeitungsvorschrift schreiben
$writer->writePi('xml-stylesheet', 'type="text/css" href="style.css"');

$writer->startElement('root');
$writer->writeElement('item', 'Hallo Welt');
$writer->endElement();

$writer->endDocument();

echo $writer->outputMemory();
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="style.css"?> <root><item>Hallo Welt</item></root>

Prozedurale API: Verarbeitungsvorschrift mit xmlwriter_write_pi

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

// Prozedurale Variante
$success = xmlwriter_write_pi($writer, 'app-config', 'mode="production" debug="false"');
var_dump($success);

xmlwriter_start_element($writer, 'config');
xmlwriter_write_element($writer, 'version', '2.5');
xmlwriter_end_element($writer);
xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
bool(true) <?xml version="1.0" encoding="UTF-8"?> <?app-config mode="production" debug="false"?> <config><version>2.5</version></config>

// Wichtig · Fallstricke

Gültiger Zielname: Der $target-Parameter muss ein gültiger XML-Name sein. Die Zeichenfolge xml (in jeder Groß-/Kleinschreibung) ist für das XML-Prolog reserviert und sollte nicht als PI-Zielname verwendet werden, da dies zu ungültigem XML führen kann.

Inhalt ohne ?>: Der $content-String darf die Zeichenfolge ?> nicht enthalten, da dies die PI vorzeitig schließen würde und das erzeugte Dokument nicht mehr wohlgeformt wäre.

OOP vs. prozedural: Ab PHP 8.0 wird die prozedurale Funktion intern auf die XMLWriter-Objektmethode gemappt. Beide Varianten sind funktional äquivalent.