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

【PHP8.x】Dom\Text::nodeValueプロパティの使い方

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

作成日: 更新日:

基本的な使い方

nodeValueプロパティは、Dom\Textクラスに所属するプロパティであり、テキストノードのテキストコンテンツを保持するプロパティです。Dom\Textクラスは、DOM (Document Object Model) においてテキストノードを表現するために使用されます。テキストノードは、XMLやHTMLドキュメント内のテキストデータを表します。

nodeValueプロパティは、このテキストノードが保持する実際のテキストデータを文字列として取得したり、設定したりするために使用されます。例えば、HTMLドキュメント内の<p>タグ内のテキストを取得する場合、そのテキストノードのnodeValueプロパティを参照することで、テキストコンテンツを取得できます。また、テキストノードのテキストコンテンツをプログラム的に変更したい場合、nodeValueプロパティに新しい文字列を代入することで、テキストコンテンツを更新できます。

nodeValueプロパティは、DOMを操作する上で非常に重要な役割を果たします。ドキュメント内のテキストデータを読み書きする際に、このプロパティを通じてテキストノードの内容にアクセスします。このプロパティを使用することで、ドキュメントの構造を解析し、必要な情報を抽出したり、動的にコンテンツを生成したりすることが可能になります。PHPのDOM拡張機能を利用してXMLやHTMLドキュメントを扱う際、テキストノードの操作には不可欠なプロパティと言えるでしょう。

構文(syntax)

1string|null $domtext->nodeValue

引数(parameters)

引数なし

引数はありません

戻り値(return)

string|null

Dom\Text::nodeValueプロパティは、ノードのテキストコンテンツを表す文字列、またはテキストノードがない場合にnullを返します。

サンプルコード

PHP nodeValuetextContent を比較する

1<?php
2
3// Dom\Text クラスの nodeValue プロパティと textContent プロパティの比較
4
5// XML 文字列を定義
6$xmlString = <<<XML
7<root>
8  <element>
9    This is some text. &amp; This is more text.
10  </element>
11</root>
12XML;
13
14// DOMDocument を作成し、XML 文字列を読み込む
15$dom = new DOMDocument();
16$dom->loadXML($xmlString);
17
18// element ノードを取得
19$element = $dom->getElementsByTagName('element')->item(0);
20
21// element ノードの最初の子ノード(テキストノード)を取得
22$textNode = $element->firstChild;
23
24// nodeValue プロパティと textContent プロパティの値を出力
25echo "nodeValue: " . $textNode->nodeValue . PHP_EOL;
26echo "textContent: " . $element->textContent . PHP_EOL;
27
28// nodeValue はテキストノード自身の値(エスケープされた文字を含む)を返す
29// textContent はノードとその子孫のテキストコンテンツを結合して返す(エスケープを解除した文字を含む)
30
31?>

PHPのDom\TextクラスにおけるnodeValueプロパティとtextContentプロパティの違いを示すサンプルコードです。nodeValueは、テキストノード自身の値を返します。一方、textContentは、ノードとその子孫ノードのテキストコンテンツを結合して返します。

このサンプルでは、まずXML文字列を定義し、DOMDocumentオブジェクトに読み込んでいます。次に、XML内の <element> タグの最初の子ノード(テキストノード)を取得します。そして、nodeValueプロパティとtextContentプロパティの値を出力しています。

nodeValueは、テキストノードに直接含まれるテキストを返し、XMLエンティティ(例: &amp;)はエスケープされたままとなります。つまり、テキストノードが持つ、文字参照やCDATAセクションを含む生のテキストデータをそのまま取得したい場合に適しています。

対照的に、textContentは、要素ノードとそのすべての子孫ノードに含まれるテキストコンテンツを結合して返します。この際、XMLエンティティはデコードされます。このため、要素ノードの内容全体を取得したい場合に便利です。

このサンプルコードを実行することで、nodeValuetextContentがそれぞれどのような値を返すかを確認できます。nodeValueプロパティは引数を取りませんが、string型もしくはnull型を返します。テキストノードが存在しない場合や、ノードがテキストノードでない場合は、nullを返すことがあります。

nodeValuetextContentは似ていますが、重要な違いがあります。nodeValueは、テキストノード自身の値を返し、XMLエスケープされた文字(例:&amp;)をそのまま含みます。一方、textContentは、要素ノードとそのすべての子孫ノードのテキストコンテンツを結合して返し、エスケープされた文字はデコードされます。サンプルコードでは、element要素の子ノード(テキストノード)に対してnodeValueを、element要素自身に対してtextContentを使用している点に注意してください。textContentは要素ノードから直接テキストを取得する場合に便利ですが、nodeValueは特定のテキストノードの値を正確に取得したい場合に適しています。どちらを使うかは、XMLの構造と、取得したいテキストの形式によって選択する必要があります。

関連コンテンツ

関連プログラミング言語

【PHP8.x】Dom\Text::nodeValueプロパティの使い方 | いっしー@Webエンジニア