【PHP8.x】Dom\HTMLElement::getElementsByTagName()メソッドの使い方
getElementsByTagNameメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getElementsByTagNameメソッドは、PHPのDOM操作において、特定のHTML要素を効率的に検索し取得するために用いられるメソッドです。Dom\HTMLElementクラスに属しており、このメソッドを呼び出したHTML要素(自身)を基点として、その子孫要素の中から、引数で指定されたタグ名を持つすべての要素を検索します。
このメソッドは、引数として検索したいHTMLタグの名前を文字列で指定します。例えば、"div"と指定すればすべてのdiv要素が、"p"と指定すればすべてのp要素が対象となります。タグ名は大文字・小文字を区別せず、内部で自動的に変換されます。
検索の結果、見つかった要素はDom\NodeListオブジェクトとして返されます。このNodeListは、複数の要素をリスト形式で保持しており、インデックス番号を用いて個々の要素にアクセスしたり、繰り返し処理で順次操作したりすることが可能です。もし該当するタグ名の要素が一つも見つからなかった場合でも、空のDom\NodeListオブジェクトが返されます。
このメソッドは、ウェブページ内の特定の種類の要素を一括で取得して、内容の変更、属性の追加、イベントリスナーの設定など、動的な操作を行う際に非常に役立ちます。HTML文書の構造をプログラムで操作する上で、基礎的かつ重要な機能の一つです。
構文(syntax)
1<?php 2 3// Dom\HTMLElement クラスのインスタンスに対して呼び出す 4$htmlElement->getElementsByTagName(string $tagName); 5 6?>
引数(parameters)
string $qualifiedName
- string $qualifiedName: 取得したい要素のタグ名を指定する文字列(例: "div", "a", "p")
戻り値(return)
Dom\HTMLCollection
指定されたタグ名を持つすべての要素のコレクションを返します。
サンプルコード
PHPで複数のタグ要素を取得する
1<?php 2 3// HTML 文字列を定義します。 4$htmlString = <<<HTML 5<!DOCTYPE html> 6<html> 7<head> 8 <title>getElementsByTagName Example</title> 9</head> 10<body> 11 <h1>見出し</h1> 12 <p>最初の段落。</p> 13 <p class="important">重要な段落。</p> 14 <div> 15 <p>div 内の段落。</p> 16 <span>span要素</span> 17 </div> 18 <p>最後の段落。</p> 19</body> 20</html> 21HTML; 22 23// DOMDocument を作成し、HTML をロードします。 24$dom = new DOMDocument(); 25$dom->loadHTML($htmlString); 26 27// body 要素を取得します。 28$body = $dom->getElementsByTagName('body')->item(0); 29 30if ($body) { 31 // body 要素の子要素である p 要素をすべて取得します。 32 $paragraphs = $body->getElementsByTagName('p'); 33 34 // 取得した p 要素の数を表示します。 35 echo "p 要素の数: " . $paragraphs->length . "\n"; 36 37 // 取得した p 要素の内容を順番に表示します。 38 foreach ($paragraphs as $paragraph) { 39 echo "p 要素の内容: " . $paragraph->textContent . "\n"; 40 } 41 42 // span 要素を取得し、内容を表示します 43 $spans = $body->getElementsByTagName('span'); 44 foreach ($spans as $span) { 45 echo "span 要素の内容: " . $span->textContent . "\n"; 46 } 47} else { 48 echo "body 要素が見つかりませんでした。\n"; 49}
PHP 8 の Dom\HTMLElement クラスにおける getElementsByTagName メソッドは、指定されたタグ名を持つ要素をすべて取得するために使用します。このメソッドは、HTML ドキュメント内で特定の種類の要素を検索し、それらの要素に対して処理を行う場合に非常に便利です。
引数には、取得したい要素のタグ名を文字列で指定します。例えば、'p' を指定すると、すべての <p> (段落) 要素が取得されます。複数の異なるタグを同時に指定することはできません。
戻り値は Dom\HTMLCollection オブジェクトです。これは、見つかった要素のリストを保持しており、配列のように扱うことができます。Dom\HTMLCollection の length プロパティで、見つかった要素の数を確認できます。また、foreach ループを使って、コレクション内の各要素に順番にアクセスし、その内容や属性を処理できます。
サンプルコードでは、まず HTML 文字列を DOMDocument オブジェクトに読み込んでいます。次に、getElementsByTagName('body') で <body> 要素を取得し、その子要素に対して getElementsByTagName('p') を実行することで、<body> 内のすべての <p> 要素を Dom\HTMLCollection として取得しています。そして、取得した要素の数と内容を順番に表示しています。同様に、<span> 要素も取得し、その内容を表示しています。この例から、getElementsByTagName が特定のタグを持つ要素を効率的に抽出できることがわかります。
getElementsByTagNameは、指定したタグ名を持つ要素をすべて取得するメソッドです。引数には取得したいタグ名を文字列で指定します。大文字小文字は区別されません。戻り値はDOMHTMLCollectionオブジェクトで、取得した要素が順番に格納されています。
サンプルコードでは、まずHTML文字列を読み込み、body要素を取得しています。その上で、body要素の子要素であるp要素とspan要素をそれぞれ取得し、内容を表示しています。
注意点として、getElementsByTagNameは静的なリストではなく、ドキュメントのライブなコレクションを返します。つまり、コレクションの内容は、ドキュメントが変更されると自動的に更新されます。また、要素が存在しない場合は空のDOMHTMLCollectionオブジェクトが返されます。item(0)で要素を取得する際は、要素が存在するかどうかを事前に確認することを推奨します。HTMLの構造によっては意図しない要素を取得する可能性があるため、対象の要素が正しい位置にあるか確認してください。
PHP DOM getElementsByTagName で要素を検索する
1<?php 2 3// HTML 文字列を定義します。 4$htmlString = <<<HTML 5<!DOCTYPE html> 6<html> 7<head> 8 <title>getElementsByTagName Example</title> 9</head> 10<body> 11 <h1>見出し</h1> 12 <p>最初の段落。</p> 13 <p>2番目の段落。</p> 14 <div> 15 <p>div 内の段落。</p> 16 </div> 17</body> 18</html> 19HTML; 20 21// DOMDocument オブジェクトを作成します。 22$dom = new DOMDocument(); 23 24// HTML を読み込みます。 25$dom->loadHTML($htmlString); 26 27// body 要素を取得します。 28$body = $dom->getElementsByTagName('body')->item(0); 29 30// p タグを持つ要素の NodeList を取得します。 31if ($body) { 32 $paragraphs = $body->getElementsByTagName('p'); 33 34 // 取得した要素の数を表示します。 35 echo "p タグの要素数: " . $paragraphs->length . "\n"; 36 37 // 各要素を順番に処理します。 38 foreach ($paragraphs as $paragraph) { 39 // 要素の内容を表示します。 40 echo "テキスト内容: " . $paragraph->textContent . "\n"; 41 } 42}
Dom\HTMLElement クラスの getElementsByTagName メソッドは、指定されたタグ名を持つ要素を、その要素の子孫から検索し、Dom\HTMLCollection オブジェクトとして返します。このメソッドは、HTMLドキュメント内の一部の要素(この例ではbody要素)を起点として、特定のタグを持つ要素を効率的に取得する際に役立ちます。
サンプルコードでは、まずHTML文字列を定義し、DOMDocumentオブジェクトに読み込んでいます。次に、getElementsByTagName('body') で body 要素を取得し、その要素に対して getElementsByTagName('p') を呼び出すことで、body 要素以下にあるすべての <p> タグの要素を Dom\HTMLCollection として取得しています。
getElementsByTagName メソッドの引数 $qualifiedName は、検索するタグ名を文字列で指定します。戻り値の Dom\HTMLCollection オブジェクトは、取得された要素のリストを保持しており、length プロパティで要素の数を取得したり、foreach ループで各要素を順番に処理したりできます。サンプルコードでは、取得した <p> タグの数を表示し、それぞれの要素の内容 (textContent) を出力しています。このメソッドを使用することで、HTML構造をプログラムで解析し、特定の要素を抽出して操作することが可能になります。
getElementsByTagNameメソッドは、指定した要素の子要素の中から、特定のタグ名を持つ要素をすべて取得します。引数$qualifiedNameには、取得したいタグ名を文字列で指定します。大文字小文字は区別されません。
戻り値はDom\HTMLCollectionというオブジェクトで、見つかった要素が順番に格納されています。lengthプロパティで要素数を確認でき、foreachなどで繰り返し処理を行うことができます。
サンプルコードでは、body要素に対してgetElementsByTagName('p')を実行していますが、bodyが存在しない場合はエラーになるため、事前にif ($body)で存在を確認しています。また、取得した要素はDOMNodeオブジェクトであるため、textContentプロパティでテキスト内容を取得できます。loadHTMLメソッドでHTMLを読み込む際には、文字コードに注意してください。必要に応じてmb_convert_encoding関数などで変換する必要があります。