【PHP8.x】nodeTypeプロパティの使い方
nodeTypeプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
nodeTypeプロパティは、DOM (Document Object Model) におけるノードの種類を識別するための整数値を保持するプロパティです。PHPのDom\Documentクラスは、XMLやHTMLなどのマークアップ言語で記述された文書全体を表現するオブジェクトです。
このDom\DocumentオブジェクトのnodeTypeプロパティは、常に文書全体を表す「文書ノード」であることを示す特定の値(例えば、XML_DOCUMENT_NODE定数で表される値)を返します。これは、Dom\Documentオブジェクトが文書構造の最上位、つまり文書そのものを表すためです。
システムエンジニアを目指す方にとって、このnodeTypeプロパティは、DOMツリーをプログラムで走査し、各ノードの種類を判別する上で重要な手段です。Dom\Documentオブジェクトでは、このプロパティで文書全体のルートノードであることを確認できます。DOM操作においてノードの種類に応じた処理を行う際、nodeTypeは基本的な判別基準として活用されます。
構文(syntax)
1<?php 2 3$document = new \Dom\Document(); 4 5// プロパティの値を取得します 6$type = $document->nodeType; 7 8var_dump($type); 9 10?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
DOMNode::nodeType を参照して判断します。
<?php
$dom = new DomDocument;
echo $dom->nodeType;
?>
上記コードを実行すると数値が出力されることから、戻り値は 戻り値なし ではありません。
<?php
libxml_use_internal_errors(true);
$dom = new DomDocument();
$dom->loadHTML('<!DOCTYPE html><html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>');
$node = $dom->documentElement;
echo $node->nodeType . PHP_EOL; // Outputs: 1
echo $dom->nodeType . PHP_EOL; // Outputs: 9
echo $dom->firstChild->nodeType . PHP_EOL; // Outputs: 7
nodeType は定数値を返します。
int
Dom\Document クラスの nodeType プロパティは、ノードの種類を表す整数値を返します。この整数値は、DOMNode::nodeType で定義されている定数に対応しており、例えばドキュメントノードの場合は 9、要素ノードの場合は 1、処理命令ノードの場合は 7 となります。
サンプルコード
PHP DomDocument nodeType を取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * DOMDocumentと、それに含まれる各ノードのnodeTypeプロパティの値を確認します。 7 * 8 * nodeTypeは、そのノードがどの種類(ドキュメント、要素、テキストなど)であるかを示す整数値を返します。 9 * PHPでは、これらの数値に対応するXML_*という形式の定義済み定数が用意されています。 10 */ 11function showNodeTypeExample(): void 12{ 13 // 解析するHTML文字列を定義します。 14 $html = <<<HTML 15<!DOCTYPE html> 16<!-- ページのコメント --> 17<html> 18<body> 19 <h1>見出し</h1> 20</body> 21</html> 22HTML; 23 24 // DOMDocumentオブジェクトをインスタンス化します。 25 $dom = new DOMDocument(); 26 27 // HTML5の解釈エラーを抑制し、HTML文字列を読み込みます。 28 libxml_use_internal_errors(true); 29 $dom->loadHTML($html); 30 libxml_clear_errors(); 31 32 // 1. DOMDocumentオブジェクト自身のnodeType (ドキュメントノード) 33 // ドキュメント全体を表し、常に 9 (XML_DOCUMENT_NODE) となります。 34 echo "DOMDocument : " . $dom->nodeType . PHP_EOL; 35 36 // 2. DOCTYPE宣言のnodeType (ドキュメント型ノード) 37 // $dom->doctype プロパティから取得します。nodeTypeは 10 (XML_DOCUMENT_TYPE_NODE) です。 38 echo "<!DOCTYPE> : " . $dom->doctype->nodeType . PHP_EOL; 39 40 // 3. <html>要素のnodeType (要素ノード) 41 // $dom->documentElement プロパティはルート要素を指します。nodeTypeは 1 (XML_ELEMENT_NODE) です。 42 echo "<html> Element : " . $dom->documentElement->nodeType . PHP_EOL; 43 44 // 4. コメントのnodeType (コメントノード) 45 // <html>要素内の最初の子ノードであるコメントを取得します。nodeTypeは 8 (XML_COMMENT_NODE) です。 46 $comment = $dom->documentElement->firstChild; 47 echo "Comment : " . $comment->nodeType . PHP_EOL; 48 49 // 5. テキストのnodeType (テキストノード) 50 // <h1>要素を取得し、その中にあるテキストノードのnodeTypeを取得します。nodeTypeは 3 (XML_TEXT_NODE) です。 51 $h1 = $dom->getElementsByTagName('h1')->item(0); 52 echo "<h1> Text : " . $h1->firstChild->nodeType . PHP_EOL; 53} 54 55// 関数を呼び出してサンプルを実行します。 56showNodeTypeExample(); 57
Dom\DocumentクラスのnodeTypeプロパティは、DOMツリー内のノードがどの種類に属するかを識別するための整数値を返します。このプロパティに引数はなく、アクセスするだけで値を取得できます。
戻り値はノードの種類を示す整数です。例えば、ドキュメント全体を表すノードは9、HTMLタグのような要素ノードは1、文章などのテキストノードは3、コメントノードは8といった値が返されます。これらの数値は、PHPで定義されているXML_DOCUMENT_NODEやXML_ELEMENT_NODEといった定数に対応しており、コードの可読性を高めるために定数を利用することが推奨されます。
サンプルコードでは、まずHTML文字列を読み込んでDOMDocumentオブジェクトを生成しています。そして、オブジェクト自身や、そこに含まれるDOCTYPE宣言、<html>要素、コメント、<h1>タグ内のテキストといった様々なノードにアクセスし、それぞれのnodeTypeプロパティの値を出力しています。実行結果から、ドキュメント全体は9、<html>要素は1、DOCTYPE宣言は10、コメントは8、テキストは3となり、ノードの種類に応じて異なる整数値が返されることが確認できます。このようにnodeTypeプロパティを利用することで、DOMツリー内の特定の種類のノードを判別して処理を分岐させることが可能になります。
nodeTypeプロパティは、DOMツリー内の各ノードがどのような種類(要素、テキスト、コメントなど)であるかを示す整数値を返します。DOMDocumentオブジェクト自身のnodeTypeは常に9(ドキュメントノード)ですが、その子ノードや孫ノード(要素、テキストなど)のnodeTypeはそれぞれ異なる値になりますので注意が必要です。例えば要素ノードは1、テキストノードは3、コメントノードは8を返します。これらの数値はPHPで定義されているXML_ELEMENT_NODEのような定数と比較すると、コードの可読性が向上します。HTMLを解析する際は、libxml_use_internal_errors(true)とlibxml_clear_errors()を使用し、パースエラーによる不要な警告を抑制すると、より安全に処理を進められます。