【PHP8.x】childNodesプロパティの使い方
childNodesプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
childNodesプロパティは、DOMTextクラスに属し、ノードの子ノードのリストを保持するプロパティです。
PHPのDOM拡張機能において、DOMTextクラスは、HTMLやXMLドキュメント内でテキストデータそのものを表すノードです。例えば、<p>これはテキストです</p>というHTML要素がある場合、「これはテキストです」という部分がDOMTextノードとして扱われます。
一般的に、DOMツリー内のノードは、その下位にさらに他のノード(子ノード)を持つことがあります。これらの子ノードの集合は、childNodesプロパティを通じてDOMNodeListという形式で取得されます。DOMNodeListは、リストのように子ノードをまとめて扱い、個々のノードにアクセスするためのオブジェクトです。
しかし、DOMTextノードは「テキスト内容」そのものを表現するノードであり、他の要素ノードのように、さらにその内部に子ノードを持つことはできません。テキストノードはDOMツリーにおける最終的なデータ部分であり、それ以上細分化される構造ではないためです。
したがって、DOMTextオブジェクトからこのchildNodesプロパティにアクセスすると、常に子ノードが一つも含まれていない空のDOMNodeListオブジェクトが返されます。この挙動は、DOMTextノードが子ノードを持たないというDOMの構造的な特性を反映したものです。テキストノードの内容自体を取得したい場合は、nodeValueプロパティなどを使用するのが適切です。
構文(syntax)
1<?php 2$dom = new DOMDocument(); 3$element = $dom->createElement('p', 'これはテキストノードです。'); 4$dom->appendChild($element); 5 6// DOMElementの子ノードであるDOMTextノードを取得 7$textNode = $element->firstChild; // $textNode は DOMText のインスタンス 8 9// DOMTextノードのchildNodesプロパティにアクセス 10$childrenOfTextNode = $textNode->childNodes; 11 12// DOMTextノードは子ノードを持たないため、childNodesは常に空のDOMNodeListを返します 13// そのため、$childrenOfTextNode->length は常に 0 となります 14echo "DOMTextノードの子ノードの数: " . $childrenOfTextNode->length . "\n"; 15?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
DOMNodeList
DOMTextオブジェクトの直下の子ノードのリストをDOMNodeListクラスのインスタンスとして返します。