【PHP8.x】DOMText::nodeValueプロパティの使い方
nodeValueプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
nodeValueプロパティは、DOMTextクラスに属し、HTMLやXMLドキュメント内でテキストノードが持つ実際のテキスト内容を文字列として保持するプロパティです。このプロパティを利用することで、テキストノードの値を読み取ったり、新しいテキスト値に更新したりすることが可能になります。
DOMTextクラスは、Webページの段落内やリスト項目内のテキスト、XMLドキュメントの要素間にある純粋なテキストデータなど、ドキュメント構造における文字データをオブジェクトとして表現します。nodeValueプロパティは、このDOMTextオブジェクトが表現するテキストデータの「中身」そのものを指し、その文字列値を直接扱えます。
例えば、<div>こんにちは世界</div> というHTML構造があった場合、「こんにちは世界」という部分がDOMTextオブジェクトとして扱われ、そのnodeValueプロパティには「こんにちは世界」という文字列が格納されます。PHPプログラムからこのnodeValueプロパティに「さようなら」と代入することで、ドキュメントのテキスト内容を動的に「さようなら」に変更することができます。
このように、nodeValueプロパティは、WebページやXMLドキュメントのテキスト部分の内容を読み取り、または変更する際に中心的な役割を果たし、DOM(Document Object Model)を通じてドキュメントを操作する上で非常に重要です。
構文(syntax)
1<?php 2$dom = new DOMDocument(); 3$textNode = $dom->createTextNode('初期のテキスト'); 4$textNode->nodeValue = '更新されたテキスト'; 5?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
DOMTextオブジェクトが表すテキストノードの文字列表現を返します。
サンプルコード
DOMText::nodeValue と textContent で値を取得する
1<?php 2 3// DOMText::nodeValue と textContent の違いを示すサンプルコード 4// nodeValue はノードの値を取得・設定します。 5// textContent はノードとその子孫ノードのテキストコンテンツを結合したものを取得・設定します。 6 7// 新しい DOMDocument を作成 8$dom = new DOMDocument(); 9 10// ルート要素を作成 11$root = $dom->createElement('root'); 12$dom->appendChild($root); 13 14// テキストノードを作成 15$textNode1 = $dom->createTextNode('Hello, '); 16$root->appendChild($textNode1); 17 18// 強調要素を作成 19$strongElement = $dom->createElement('strong', 'World'); 20$root->appendChild($strongElement); 21 22// テキストノードを作成 23$textNode2 = $dom->createTextNode('!'); 24$root->appendChild($textNode2); 25 26// nodeValue を使用して最初のテキストノードの値を取得 27$nodeValue = $textNode1->nodeValue; 28echo "nodeValue: " . $nodeValue . PHP_EOL; // 出力: nodeValue: Hello, 29 30// textContent を使用してルート要素のテキストコンテンツを取得 31$textContent = $root->textContent; 32echo "textContent: " . $textContent . PHP_EOL; // 出力: textContent: Hello, World! 33 34// nodeValue は特定のノードの値のみを取得するのに対し、 35// textContent はノードとその子孫ノードのテキストコンテンツを結合したものを取得します。 36 37?>
PHPのDOMTextクラスにおけるnodeValueプロパティは、テキストノードの値を文字列として取得または設定するために使用されます。引数はなく、戻り値は文字列です。このサンプルコードでは、nodeValueとtextContentの違いを明確に示しています。
まず、DOMDocumentオブジェクトを作成し、ルート要素とその子要素としてテキストノードと強調要素(strong要素)を追加します。nodeValueは、特定のノード、この場合は最初のテキストノード('Hello, ')の値のみを返します。したがって、$textNode1->nodeValueは'Hello, 'という文字列を返します。
一方、textContentは、指定されたノード(この場合はルート要素)とそのすべての子孫ノードのテキストコンテンツを結合したものを返します。そのため、$root->textContentは'Hello, World!'という文字列を返します。nodeValueがノード自身の値のみを扱うのに対し、textContentはノード以下のすべてのテキストコンテンツを連結して取得できる点が重要な違いです。
このように、nodeValueは特定のテキストノードの値を直接操作する際に、textContentは要素全体のテキストコンテンツをまとめて取得する際に便利です。この違いを理解することで、XMLドキュメントを効率的に処理できます。
DOMText::nodeValueは、テキストノード自身の値のみを取得・設定します。一方、textContentは、要素ノード以下のすべてのテキストノードを結合した文字列を取得・設定します。サンプルコードでは、nodeValueが最初のテキストノード"Hello, "のみを返すのに対し、textContentが"Hello, World!"を返すことで、この違いを明確に示しています。nodeValueは特定のテキストノードの操作に、textContentは要素全体のテキスト内容の取得に適しています。textContentを設定する際は、要素の子ノードがすべてテキストに置き換えられる点に注意が必要です。XML構造を維持する必要がある場合は、nodeValueで個々のテキストノードを操作してください。