【PHP8.x】nextSiblingプロパティの使い方

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

作成日: 更新日:

基本的な使い方

nextSiblingプロパティは、Dom\ElementオブジェクトがDOMツリー上で次に位置する兄弟ノードを保持するプロパティです。DOMツリーにおける兄弟ノードとは、同じ親ノードを持つノードのことを指し、このプロパティにアクセスすることで、現在の要素の直後に位置するノードに簡単にアクセスできるようになります。

このプロパティが返す値は、次の兄弟ノードが存在する場合はDom\Nodeクラスのインスタンス、またはそのサブクラスのインスタンスです。もし次の兄弟ノードが存在しない場合は、nullを返します。これにより、Webページなどの構造を表すDOMツリーを順方向に効率よく走査し、特定の要素の隣にある要素を操作したり、その情報を取得したりする際に非常に役立ちます。

例えば、HTMLドキュメント内で見つけた特定の要素のすぐ隣にある別の要素に対して処理を実行したい場合などに利用されます。返されるノードは、HTMLタグで囲まれた要素ノードだけでなく、テキストノードやコメントノードなども含まれる可能性がある点に注意が必要です。要素ノードのみを対象としたい場合は、返されたノードの型を適切にチェックする必要があります。このプロパティは、DOM構造を理解し、PHPでWebコンテンツを動的に制御するアプリケーションを開発する上で重要な機能の一つです。

構文(syntax)

1<?php
2
3$html = <<<HTML
4<div>
5    <p id="item-p">最初の要素</p>
6    <!-- これはコメントです -->
7    <a id="item-a">二番目の要素</a>
8    <span>三番目の要素</span>
9</div>
10HTML;
11
12$document = new DOMDocument();
13$document->loadHTML($html);
14
15// IDが "item-p" の Dom\Element オブジェクトを取得
16// DOMDocument::getElementById は DOMElement を返すが、PHP 8 では Dom\Element と互換性がある
17$currentElement = $document->getElementById('item-p');
18
19if ($currentElement instanceof Dom\Element) {
20    // Dom\Element の nextSibling プロパティにアクセスし、次の兄弟ノードを取得する
21    // このプロパティは Dom\Node オブジェクト、または null を返す
22    $nextSibling = $currentElement->nextSibling;
23
24    // 取得した兄弟ノードがどのタイプかを確認し、情報を出力
25    if ($nextSibling instanceof Dom\Element) {
26        echo "次の兄弟ノードは要素です。タグ名: " . $nextSibling->tagName . "\n";
27    } elseif ($nextSibling instanceof Dom\Text) {
28        echo "次の兄弟ノードはテキストノードです。内容: \"" . trim($nextSibling->nodeValue) . "\"\n";
29    } elseif ($nextSibling instanceof Dom\Comment) {
30        echo "次の兄弟ノードはコメントノードです。内容: \"" . $nextSibling->nodeValue . "\"\n";
31    } elseif ($nextSibling === null) {
32        echo "次の兄弟ノードはありません。\n";
33    } else {
34        echo "次の兄弟ノードは不明なタイプです (Node Type: " . $nextSibling->nodeType . ").\n";
35    }
36} else {
37    echo "指定された要素が見つかりませんでした。\n";
38}
39
40?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

Dom\Node|null

現在の要素の直後に兄弟要素が存在する場合、その兄弟要素を表すDom\Nodeオブジェクトを返します。直後に兄弟要素が存在しない場合はnullを返します。

関連コンテンツ

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