【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)
戻り値なし
戻り値はありません