Start · Sprachen · PHP · Referenz · Dom\ProcessingInstruction

Dom\ProcessingInstruction

Klasse

Repräsentiert eine XML-Verarbeitungsanweisung (Processing Instruction) wie <code>&lt;?target data?&gt;</code> in einem DOM-Dokument.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\ProcessingInstruction extends Dom\CharacterData

Beschreibung

Dom\ProcessingInstruction ist Teil der modernen, konformen DOM-API von PHP (Namespace Dom\, eingeführt in PHP 8.4) und modelliert XML-Verarbeitungsanweisungen gemäß dem W3C-DOM-Standard. Eine Verarbeitungsanweisung hat die Form <?ziel inhalt?>, wobei ziel die Applikation identifiziert, an die die Anweisung gerichtet ist, und inhalt die Daten enthält.

Die Klasse erbt von Dom\CharacterData und stellt zwei charakteristische Eigenschaften bereit: target (das Ziel der Anweisung, z. B. php oder xml-stylesheet) und data (der Inhalt der Anweisung). Typische Einsatzgebiete sind das Einbetten von Stylesheet-Verknüpfungen (<?xml-stylesheet type="text/xsl" href="style.xsl"?>) oder applikationsspezifischer Metadaten in XML-Dokumenten.

Instanzen dieser Klasse werden nicht direkt per new erzeugt, sondern über Dom\Document::createProcessingInstruction() oder durch das Parsen eines XML-Dokuments mit Dom\XMLDocument::createFromString() bzw. Dom\XMLDocument::createFromFile() gewonnen. Die Klasse ist die moderne Entsprechung zur älteren DOMProcessingInstruction-Klasse und bietet strikte Typisierung sowie spec-konforme Fehlerbehandlung.

Über die geerbten Methoden von Dom\Node und Dom\CharacterData lässt sich der Knoten im DOM-Baum navigieren, einfügen, ersetzen oder entfernen.

Beispiele

Verarbeitungsanweisung auslesen

<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<root>
    <item>Beispiel</item>
</root>
XML;

$doc = Dom\XMLDocument::createFromString($xml);

foreach ($doc->childNodes as $node) {
    if ($node instanceof Dom\ProcessingInstruction) {
        echo 'Target: ' . $node->target . PHP_EOL;
        echo 'Data:   ' . $node->data   . PHP_EOL;
    }
}
Target: xml-stylesheet Data: type="text/xsl" href="style.xsl"

Verarbeitungsanweisung programmatisch erzeugen und einfügen

<?php
$doc = Dom\XMLDocument::createEmpty();

// Stylesheet-Anweisung erzeugen und vor das Root-Element stellen
$pi = $doc->createProcessingInstruction(
    'xml-stylesheet',
    'type="text/css" href="style.css"'
);
$doc->appendChild($pi);

$root = $doc->createElement('katalog');
$doc->appendChild($root);

$item = $doc->createElement('produkt');
$item->textContent = 'PHP-Buch';
$root->appendChild($item);

echo $doc->saveXml();
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="style.css"?> <katalog><produkt>PHP-Buch</produkt></katalog>

Verarbeitungsanweisung ändern

<?php
$xml = '<?xml version="1.0"?><?app-config debug="false"?><root/>';
$doc = Dom\XMLDocument::createFromString($xml);

foreach ($doc->childNodes as $node) {
    if ($node instanceof Dom\ProcessingInstruction && $node->target === 'app-config') {
        // data-Eigenschaft aktualisieren
        $node->data = 'debug="true" log="verbose"';
        echo 'Aktualisiert: <?' . $node->target . ' ' . $node->data . '?>';
    }
}
Aktualisiert: <?app-config debug="true" log="verbose"?>

// Wichtig · Fallstricke

Namespace-Trennung: Dom\ProcessingInstruction gehört zur neuen Dom\-Erweiterung (PHP 8.4+) und ist nicht kompatibel mit der älteren DOMProcessingInstruction-Klasse aus der ext/dom-Erweiterung. Methoden und Objekte der beiden APIs lassen sich nicht mischen.

Target-Validierung: Ein ungültiger Zielname (z. B. mit Leerzeichen oder dem reservierten Wert xml) führt zu einer Dom\Exception mit dem Code INVALID_CHARACTER_ERR.

Kein direktes new: Die Klasse kann nicht direkt instanziiert werden; verwende stets Dom\Document::createProcessingInstruction().