【PHP8.x】nodeValueプロパティの使い方

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

作成日: 更新日:

基本的な使い方

nodeValueプロパティは、DOMツリーにおける各ノードが持つテキスト値を取得または設定するために設計されたプロパティです。しかし、このプロパティが所属するDOM\XMLDocumentクラスのオブジェクトは、XMLドキュメント全体のルートノードを表します。ドキュメントノード自体は、HTMLの要素やテキスト、コメントのように具体的なテキストコンテンツを直接保持しません。

そのため、DOM\XMLDocumentオブジェクトのnodeValueプロパティにアクセスした場合、常にnullが返されます。このプロパティに何らかの文字列値を設定しようとしても、ドキュメントオブジェクトの構造や内容には実際の影響を与えません。

nodeValueプロパティが有効に機能するのは、DOM\Text(テキストノード)、DOM\Attr(属性ノード)、DOM\Comment(コメントノード)などのように、直接的にテキストデータを保持するノードタイプに対してです。これらのノードでは、nodeValueプロパティを通じてその内容を読み取ったり、変更したりすることができます。DOM\XMLDocumentオブジェクトでコンテンツを操作する際は、代わりにdocumentElementプロパティを通じてルート要素にアクセスし、その子ノードや属性を操作することになります。

構文(syntax)

1<?php
2
3$document = new Dom\XMLDocument();
4$nodeValue = $document->nodeValue;

引数(parameters)

引数なし

引数はありません

戻り値(return)

string|null

このプロパティは、XMLノードのテキストコンテンツを文字列として返します。ノードにテキストコンテンツがない場合はnullを返します。

サンプルコード

PHP DomDocument nodeValueとtextContentの比較

1<?php
2
3// Dom\XMLDocument の nodeValue プロパティと textContent プロパティの比較
4
5// XML 文字列をロード
6$xmlString = <<<XML
7<root>
8  <element>This is some text.</element>
9  <element><![CDATA[This is CDATA text.]]></element>
10  <element>This is <b>bold</b> text.</element>
11</root>
12XML;
13
14$dom = new DOMDocument();
15$dom->loadXML($xmlString);
16
17// element ノードを取得
18$elements = $dom->getElementsByTagName('element');
19
20// 各 element ノードについて nodeValue と textContent を比較
21foreach ($elements as $element) {
22    echo "Node Name: " . $element->nodeName . "\n";
23    echo "nodeValue: " . $element->nodeValue . "\n";
24    echo "textContent: " . $element->textContent . "\n";
25    echo "---\n";
26}
27
28// 出力:
29// Node Name: element
30// nodeValue: This is some text.
31// textContent: This is some text.
32// ---
33// Node Name: element
34// nodeValue: This is CDATA text.
35// textContent: This is CDATA text.
36// ---
37// Node Name: element
38// nodeValue: This is bold text.
39// textContent: This is This is bold text.
40// ---
41
42// nodeValue は、CDATAセクションを適切に処理し、HTMLタグを削除します。
43// textContent は、HTMLタグを含むすべてのテキストコンテンツを返します。

PHP 8におけるDom\XMLDocumentクラスのnodeValueプロパティについて解説します。nodeValueは、XMLドキュメント内のノードが持つテキスト値を文字列として取得するためのプロパティです。引数はなく、戻り値は文字列型(string)またはnullです。

サンプルコードでは、XML文字列を読み込み、<element>タグを持つ各ノードに対してnodeValuetextContentプロパティの値を比較しています。nodeValueは、CDATAセクション内のテキストを適切に処理し、HTMLタグなどのマークアップを削除したテキストを返します。一方、textContentはノード内のすべてのテキストコンテンツを返し、HTMLタグなどのマークアップもそのまま含まれます。

例えば、<b>bold</b>というタグを含む要素の場合、nodeValueは"bold text"を返し、textContentは"This is bold text."を返します。CDATAセクションの場合、nodeValuetextContentはどちらもCDATAセクション内のテキストをそのまま返します。

nodeValueは、XMLドキュメントからテキストデータのみを抽出したい場合に役立ちます。一方、textContentは、ノード内のすべてのテキストコンテンツを取得したい場合に適しています。XMLを扱う際、これらのプロパティの違いを理解することで、より柔軟なデータ処理が可能になります。

nodeValuetextContentは、どちらもノードのテキスト情報を取得するプロパティですが、挙動が異なります。nodeValueは、ノードの種類によって返す値が変わり、要素ノードの場合は子孫ノードのテキストコンテンツを連結したものを返します。CDATAセクションは適切に処理されますが、HTMLタグは削除されます。一方、textContentは、ノードとその子孫ノードのテキストコンテンツをすべて連結して返します。HTMLタグもそのまま含まれます。この違いを理解し、目的に応じて使い分けることが重要です。nodeValuenullを返す場合があることにも注意してください。XMLドキュメントの構造を意識し、適切なプロパティを選択することで、意図した通りのテキスト情報を取得できます。