【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 nodeValue と textContent を比較する
1<?php 2 3// Dom\Text クラスの nodeValue プロパティと textContent プロパティの比較 4 5// XML 文字列を定義 6$xmlString = <<<XML 7<root> 8 <element> 9 This is some text. & 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エンティティ(例: &)はエスケープされたままとなります。つまり、テキストノードが持つ、文字参照やCDATAセクションを含む生のテキストデータをそのまま取得したい場合に適しています。
対照的に、textContentは、要素ノードとそのすべての子孫ノードに含まれるテキストコンテンツを結合して返します。この際、XMLエンティティはデコードされます。このため、要素ノードの内容全体を取得したい場合に便利です。
このサンプルコードを実行することで、nodeValueとtextContentがそれぞれどのような値を返すかを確認できます。nodeValueプロパティは引数を取りませんが、string型もしくはnull型を返します。テキストノードが存在しない場合や、ノードがテキストノードでない場合は、nullを返すことがあります。
nodeValueとtextContentは似ていますが、重要な違いがあります。nodeValueは、テキストノード自身の値を返し、XMLエスケープされた文字(例:&)をそのまま含みます。一方、textContentは、要素ノードとそのすべての子孫ノードのテキストコンテンツを結合して返し、エスケープされた文字はデコードされます。サンプルコードでは、element要素の子ノード(テキストノード)に対してnodeValueを、element要素自身に対してtextContentを使用している点に注意してください。textContentは要素ノードから直接テキストを取得する場合に便利ですが、nodeValueは特定のテキストノードの値を正確に取得したい場合に適しています。どちらを使うかは、XMLの構造と、取得したいテキストの形式によって選択する必要があります。