Signatur
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;
}
}
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();
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 . '?>';
}
}
// 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().