Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】Dom\ProcessingInstruction::nodeNameプロパティの使い方

nodeNameプロパティの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

nodeNameプロパティは、処理命令ノードのターゲット名を保持するプロパティです。処理命令(Processing Instruction)とは、XMLやHTML文書内において、文書を処理する特定のアプリケーションに対する指示を記述するための特別なノードを指します。処理命令は一般的に<?target data?>という形式で記述され、このtargetの部分がターゲット名にあたります。例えば、XML文書に<?xml-stylesheet type="text/css" href="style.css"?>という記述があった場合、この処理命令ノードを表すDom\ProcessingInstructionオブジェクトのnodeNameプロパティの値は、ターゲット名である"xml-stylesheet"という文字列になります。このプロパティは読み取り専用であり、値を取得することのみ可能です。そのため、プログラム上でnodeNameプロパティの値を変更して、処理命令のターゲット名を書き換えることはできません。DOMを操作して文書を解析する際に、このプロパティを参照することで、取得したノードがどのような種類の処理命令であるかを識別し、それに応じた処理を実装する上で非常に重要です。

構文(syntax)

1<?php
2
3$dom = new DOMDocument('1.0', 'UTF-8');
4$pi = $dom->createProcessingInstruction('php', 'echo "Hello, World!";');
5$dom->appendChild($pi);
6
7// ProcessingInstructionのnodeNameプロパティ(ターゲット名)を取得します
8$node_name = $pi->nodeName;
9
10echo $node_name; // "php" が出力されます
11

引数(parameters)

引数なし

引数はありません

戻り値(return)

string

Dom\ProcessingInstruction オブジェクトのノード名を表す文字列を返します。

サンプルコード

PHP DOM Processing InstructionのnodeNameを取得する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * DOMProcessingInstructionのnodeNameプロパティの使用例を示します。
7 *
8 * XML内の処理命令(Processing Instruction)を見つけ、そのターゲット名を取得します。
9 */
10function demonstrateProcessingInstructionNodeName(): void
11{
12    // 処理命令 (例: <?xml-stylesheet ... ?>) を含むXML文字列を定義
13    $xmlString = <<<XML
14<?xml version="1.0" encoding="UTF-8"?>
15<?xml-stylesheet type="text/css" href="style.css"?>
16<root>
17    <item>Hello World</item>
18</root>
19XML;
20
21    // DOMDocumentオブジェクトを作成
22    $dom = new DOMDocument();
23
24    // XML文字列を読み込む
25    $dom->loadXML($xmlString);
26
27    // ドキュメントのすべての子ノードをループ処理
28    foreach ($dom->childNodes as $node) {
29        // ノードが処理命令(ProcessingInstruction)であるかを確認します。
30        // DOMProcessingInstructionは、PHP 8の Dom\ProcessingInstruction のエイリアスです。
31        if ($node instanceof DOMProcessingInstruction) {
32            // nodeName プロパティは、処理命令のターゲット名 (<?target data?> の "target" 部分) を文字列で返します。
33            // この例では "xml" と "xml-stylesheet" が該当します。
34            echo "処理命令のターゲット (nodeName): " . $node->nodeName . PHP_EOL;
35        }
36    }
37}
38
39// 関数を実行して結果を表示
40demonstrateProcessingInstructionNodeName();

PHPのDom\ProcessingInstructionクラスにあるnodeNameプロパティは、XML文書内の「処理命令(Processing Instruction)」のターゲット名を取得するために使用されます。処理命令とは、<?target data?>という形式で記述され、XMLを処理するアプリケーションに特定の指示を与えるものです。nodeNameプロパティは、このtargetの部分を文字列として返します。

このサンプルコードでは、まず<?xml-stylesheet ... ?>という処理命令を含むXML文字列を用意し、DOMDocumentオブジェクトに読み込んでいます。次に、foreachループでXML文書内のノードを一つずつ調べていき、instanceof DOMProcessingInstructionを用いて、そのノードが処理命令であるかどうかを判定しています。

ノードが処理命令であった場合、$node->nodeNameという形でnodeNameプロパティにアクセスします。このプロパティは引数を取らず、戻り値として処理命令のターゲット名を文字列で返します。この例では、xmlxml-stylesheetという文字列が取得され、画面に出力されます。このようにnodeNameプロパティは、XMLから特定の処理命令を識別し、その種類を判別する際に役立ちます。

ProcessingInstructionnodeNameプロパティは、処理命令全体の文字列ではなく、<?target data?>におけるtargetの部分、つまりターゲット名のみを返します。例えば<?xml-stylesheet ...?>からはxml-stylesheetという文字列が得られます。このプロパティは要素ノードなど他のノードタイプにも存在しますが、その場合はタグ名を返すなど、ノードの種類によって意味が異なるため注意が必要です。また、XMLを読み込む際、<?xml version...?>というXML宣言も処理命令として扱われることがあります。コードのようにinstanceofでノードの種類を正確に確認してからプロパティにアクセスすることが、安全な処理の基本となります。

関連コンテンツ

関連プログラミング言語

【PHP8.x】Dom\ProcessingInstruction::nodeNameプロパティの使い方 | いっしー@Webエンジニア