XMLWriter::startPiでXMLに処理命令を挿入!サンプルコードで分かりやすく解説
構文
XMLWriter::startPi($target);
パラメータ
$target
: 処理命令のターゲット。これは、処理命令の種類を識別するために使用されます。
戻り値
成功すると TRUE を返し、失敗すると FALSE を返します。
例
次のコードは、xml-stylesheet
処理命令を作成する例です。
$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument();
$xml->startPi('xml-stylesheet');
$xml->writeAttribute('type', 'text/xml');
$xml->writeAttribute('href', 'style.css');
$xml->endPi();
$xml->startElement('root');
$xml->text('Hello, world!');
$xml->endElement();
$xml->endDocument();
$output = $xml->outputMemory();
echo $output;
このコードは次の XML を生成します。
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xml" href="style.css" ?>
<root>Hello, world!</root>
XMLWriter::startPi は、XML 文書に処理命令を追加する必要がある場合に役立ちます。処理命令は、ドキュメントの処理に関する情報を埋め込むために使用できます。
XMLWriter::startPi を使用する場合、次の点に注意する必要があります。
- 処理命令は、要素内にネストすることはできません。
- 処理命令の内容は、処理命令のターゲットによって異なります。
- 処理命令のターゲットは、有効な XML 名である必要があります。
xml-stylesheet 処理命令
この例は、xml-stylesheet
処理命令を作成して、スタイルシートを指定する方法を示します。
$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument();
$xml->startPi('xml-stylesheet');
$xml->writeAttribute('type', 'text/xml');
$xml->writeAttribute('href', 'style.css');
$xml->endPi();
$xml->startElement('root');
$xml->text('Hello, world!');
$xml->endElement();
$xml->endDocument();
$output = $xml->outputMemory();
echo $output;
encoding 処理命令
この例は、encoding
処理命令を作成して、XML 文書のエンコーディングを指定する方法を示します。
$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('root');
$xml->text('Hello, world!');
$xml->endElement();
$xml->endDocument();
$output = $xml->outputMemory();
echo $output;
コメント
この例は、XMLWriter::startPi
を使用して XML 文書にコメントを追加する方法を示します。
$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument();
$xml->startPi('xml-comment');
$xml->writeComment('This is a comment');
$xml->endPi();
$xml->startElement('root');
$xml->text('Hello, world!');
$xml->endElement();
$xml->endDocument();
$output = $xml->outputMemory();
echo $output;
カスタム処理命令
この例は、XMLWriter::startPi
を使用してカスタム処理命令を作成する方法を示します。
$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument();
$xml->startPi('my-pi');
$xml->writeAttribute('data', 'This is my data');
$xml->endPi();
$xml->startElement('root');
$xml->text('Hello, world!');
$xml->endElement();
$xml->endDocument();
$output = $xml->outputMemory();
echo $output;
文字列の挿入
処理命令は、単純な文字列として XML 文書に挿入できます。
$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument();
$xml->writeRaw('<?xml-stylesheet type="text/xml" href="style.css" ?>');
$xml->startElement('root');
$xml->text('Hello, world!');
$xml->endElement();
$xml->endDocument();
$output = $xml->outputMemory();
echo $output;
DOMDocument
DOMDocument
クラスを使用して、XML 文書を作成し、処理命令を追加することもできます。
$doc = new DOMDocument();
$doc->loadXML('<?xml version="1.0" ?>');
$pi = $doc->createProcessingInstruction('xml-stylesheet', 'type="text/xml" href="style.css"');
$doc->insertBefore($pi, $doc->firstChild);
$root = $doc->createElement('root');
$root->textContent = 'Hello, world!';
$doc->appendChild($root);
$output = $doc->saveXML();
echo $output;
SimpleXML
SimpleXML
クラスを使用して、XML 文書を作成し、処理命令を追加することもできます。
$xml = simplexml_load_string('<?xml version="1.0" ?>');
$pi = $xml->addChild('<?xml-stylesheet');
$pi->addAttribute('type', 'text/xml');
$pi->addAttribute('href', 'style.css');
$root = $xml->addChild('root');
$root->addChild('text', 'Hello, world!');
$output = $xml->asXML();
echo $output;
これらの方法は、XMLWriter::startPi
の代替方法として使用できます。どの方法を使用するかは、個々のニーズと好みによって異なります。
注意
XMLWriter::startPi
は、処理命令のターゲットと内容を厳密にチェックします。一方、文字列挿入、DOMDocument
、SimpleXML
などの方法は、より柔軟ですが、誤った処理命令を作成する可能性が高くなります。