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

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

作成日: 更新日:

基本的な使い方

previousElementSiblingプロパティは、DOM(Document Object Model)ツリー構造において、現在のノードの直前にある「要素ノード(Element Node)」の兄弟ノードを保持するプロパティです。このプロパティは、HTMLやXML文書の構造を走査する際に、テキストノードやコメントノードといった非要素ノードをスキップし、純粋な要素ノードのみを効率的に取得したい場合に利用されます。例えば、ウェブページで特定のHTML要素に隣接する兄弟要素を操作したいが、その間に含まれる改行や空白文字、コメントなどを無視したい場合に非常に便利です。

しかし、PHPの標準DOM拡張において、DOMCommentクラスはコメントノードを表しており、通常このpreviousElementSiblingプロパティを直接は保持しません。このプロパティは主にDOMElementクラス、すなわちHTMLタグのような要素ノードに定義されています。DOMCommentオブジェクトが持つのは、要素ノードだけでなく、あらゆる種類の直前の兄弟ノード(テキストノードや他のコメントノードなども含む)を返すpreviousSiblingプロパティです。もしDOMCommentオブジェクトの直前にある要素ノード型の兄弟ノードを取得したい場合は、previousSiblingを繰り返し利用し、返されたノードの型がDOMElementであるかを確認する処理が必要になります。このpreviousElementSiblingプロパティは、要素ノードを直接扱う際にその強力な機能を発揮するものです。

構文(syntax)

1<?php
2
3// 解析するHTML文字列を定義
4$html = '
5<div>
6    <p>最初の段落</p>
7    <!-- ここがコメント -->
8    <span>次の要素</span>
9</div>
10';
11
12// DOMDocumentオブジェクトを生成し、HTMLを読み込む
13$doc = new DOMDocument();
14$doc->loadHTML($html, LIBXML_NOERROR);
15
16// XPathを使用してコメントノードを取得
17$xpath = new DOMXPath($doc);
18$comment = $xpath->query('//comment()')->item(0);
19
20// コメントノードの直前の兄弟「要素」を取得する
21// (コメントの直前にある改行や空白などのテキストノードは無視されます)
22$previousElement = $comment->previousElementSibling;
23
24// 取得した要素のタグ名を出力する
25if ($previousElement !== null) {
26    // 出力結果: p
27    echo $previousElement->tagName;
28}
29

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

関連コンテンツ

関連プログラミング言語