Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【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\HTMLCollectionlength プロパティで、見つかった要素の数を確認できます。また、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関数などで変換する必要があります。

関連コンテンツ

関連プログラミング言語

【PHP8.x】Dom\HTMLElement::getElementsByTagName()メソッドの使い方 | いっしー@Webエンジニア