【PHP8.x】DOMProcessingInstruction::nodeNameプロパティの使い方
nodeNameプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
nodeNameプロパティは、DOMProcessingInstructionオブジェクトが表す処理命令のターゲット名を文字列として保持するプロパティです。XMLやHTMLドキュメントにおける処理命令は、<?target data?>という構文で記述され、文書を処理するアプリケーションに対する指示を伝えます。このnodeNameプロパティは、この構文のtargetに相当する部分の値を返します。例えば、<?xml-stylesheet href="style.css"?>という処理命令を表すオブジェクトの場合、nodeNameプロパティの値は文字列"xml-stylesheet"となります。このプロパティは読み取り専用であるため、値の取得はできますが、直接代入して変更することはできません。XML文書の中から特定のアプリケーション向けの処理命令を識別し、その種類に応じたプログラム処理を実装する際に利用されます。
構文(syntax)
1<?php 2 3$xmlString = '<?xml version="1.0" ?><?app-target action="process"?><data/>'; 4 5$dom = new DOMDocument(); 6$dom->loadXML($xmlString); 7 8$processingInstruction = $dom->childNodes[0]; 9 10$targetName = $processingInstruction->nodeName; 11 12echo $targetName; 13 14?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
DOMProcessingInstruction クラスの nodeName プロパティは、このノードの名前を表す文字列を返します。
サンプルコード
PHP DOMProcessingInstruction nodeName を取得する
1<?php 2 3/** 4 * DOMProcessingInstructionのnodeNameプロパティの使用例を示します。 5 * 6 * XMLドキュメントを解析し、処理命令(Processing Instruction)ノードを特定して、 7 * そのnodeNameプロパティ(ターゲット名)を取得し表示します。 8 */ 9function getProcessingInstructionNodeNameExample(): void 10{ 11 // 処理命令 '<?php-linter-disable?>' を含むXML文字列を定義します。 12 $xmlString = <<<XML 13<?xml version="1.0" encoding="UTF-8"?> 14<?php-linter-disable some-rule?> 15<root> 16 <element>Hello, World!</element> 17</root> 18XML; 19 20 // DOMDocumentオブジェクトをインスタンス化します。 21 $dom = new DOMDocument(); 22 23 // 定義したXML文字列を読み込み、解析します。 24 $dom->loadXML($xmlString); 25 26 // ドキュメントの直下の子ノードを順番に確認します。 27 foreach ($dom->childNodes as $node) { 28 // ノードがDOMProcessingInstructionクラスのインスタンスであるかを確認します。 29 if ($node instanceof DOMProcessingInstruction) { 30 // DOMProcessingInstructionの場合、`nodeName`プロパティは 31 // 処理命令のターゲット名(この例では 'php-linter-disable')を返します。 32 // `target`プロパティも同じ値を返します。 33 echo '処理命令ノードが見つかりました。' . PHP_EOL; 34 echo 'nodeName: ' . $node->nodeName . PHP_EOL; 35 echo 'data: ' . $node->data . PHP_EOL; 36 break; // 最初の処理命令を見つけたら処理を終了します。 37 } 38 } 39} 40 41// 関数を実行して結果を表示します。 42getProcessingInstructionNodeNameExample();
このPHPサンプルコードは、XMLドキュメント内に含まれる「処理命令(Processing Instruction)」のターゲット名を取得する方法を示しています。処理命令とは、<?と?>で囲まれた、XMLを処理するアプリケーションへの指示のことです。
コードでは、まずDOMDocumentクラスを利用して、<?php-linter-disable some-rule?>という処理命令を含むXML文字列を解析します。次に、foreachループでXMLドキュメント内の各ノードを調べ、instanceof演算子を使ってノードの種類がDOMProcessingInstructionであるかを確認します。
対象のノードが見つかると、そのnodeNameプロパティにアクセスします。DOMProcessingInstructionクラスのnodeNameプロパティは、処理命令のターゲット名、つまり<?の直後から最初の空白文字までの文字列を返します。このサンプルではphp-linter-disableが取得されます。このプロパティに引数はなく、アクセスするとstring型の値が返されます。取得したターゲット名は、echo文でコンソールに出力されます。
このようにnodeNameプロパティを利用することで、XML文書中の特定の処理命令を識別し、その種類に応じたプログラムの動作を制御することが可能になります。
DOMProcessingInstructionのnodeNameプロパティは、処理命令のターゲット名、つまり<?と最初の空白の間の文字列を返します。これは、要素ノードのnodeNameがタグ名を返すのとは異なるため、扱うノードの種類によってnodeNameが返す内容が変わる点に注意が必要です。また、nodeNameはtargetプロパティと全く同じ値を返します。意味をより明確にしたい場合はtargetプロパティを使うとコードが分かりやすくなります。ターゲット名以降のデータ(サンプルコードのsome-rule)を取得するにはdataプロパティを使うため、nodeNameと混同しないようにしましょう。実際の開発では、不正なXMLを読み込むとloadXMLが失敗する場合があるため、エラー処理を適切に行うことが大切です。