【PHP8.x】DOMNotation::nodeNameプロパティの使い方
nodeNameプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
nodeNameプロパティは、DOMNotationクラスが表すXMLの記法(NOTATION)の名前を保持するプロパティです。このプロパティは、XML文書のDTD(文書型定義)内で定義されたNOTATION要素の識別子、つまり名前を取得するために使用されます。
XMLにおけるNOTATIONは、外部エンティティの形式(例:画像ファイルの種類、特定のアプリケーションで処理されるデータ形式など)を宣言するために用いられます。DOMNotationクラスは、このようなNOTATIONの定義をPHPプログラム上でオブジェクトとして表現するためのものであり、nodeNameプロパティは、そのNOTATIONが持つ固有の名前(識別子)を提供します。
このプロパティの値は常に文字列型で、NOTATIONの名称そのものを返します。例えば、XMLのDTD内で<NOTATION name="image-jpeg" PUBLIC "..." >のように定義されている場合、このプロパティは "image-jpeg" という文字列を返します。これにより、プログラムがどの記法を参照しているのかを明確に判別し、適切な処理を行うことが可能になります。
nodeNameプロパティは、DOMNodeクラスから継承されており、XMLドキュメント内の要素や属性など、他の様々なノードタイプにおいても共通してそのノードの識別名を取得するために用いられる、標準的なプロパティの一つです。このプロパティは読み取り専用であるため、プログラムからその値を変更することはできません。XML文書の構造を解析し、特定のNOTATIONに関する情報を取得したい場合に非常に役立ちます。
構文(syntax)
1<?php 2 3// NOTATIONを含むXMLドキュメントを定義 4$xmlString = <<<XML 5<!DOCTYPE example [ 6 <!NOTATION gif SYSTEM "image/gif"> 7]> 8<example/> 9XML; 10 11$dom = new DOMDocument(); 12$dom->loadXML($xmlString); 13 14// DOMDocumentTypeオブジェクトからNOTATIONのリスト(DOMNamedNodeMap)を取得 15$notations = $dom->doctype->notations; 16 17if ($notations && $notations->length > 0) { 18 // 最初のDOMNotationオブジェクトを取得 19 $notation = $notations->item(0); 20 21 // DOMNotationオブジェクトのnodeNameプロパティにアクセスし、ノード名を出力 22 // この場合、"gif" が出力される 23 echo $notation->nodeName; 24} 25 26?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
DOMNotation オブジェクトのノード名を文字列で返します。
サンプルコード
PHP DOMNotation nodeName を取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * DOMNotationのnodeNameプロパティの使用例を示します。 7 * 8 * この関数は、DTD(文書型定義)にノーテーションを含むXMLを解析し、 9 * 特定のノーテーションのノード名を取得して表示します。 10 */ 11function demonstrateDomNotationNodeName(): void 12{ 13 // ノーテーション(NOTATION)を含むXML文字列を定義します。 14 // <!NOTATION jpg ...> の 'jpg' がノーテーションの名前(nodeName)になります。 15 $xmlString = <<<XML 16 <?xml version="1.0" encoding="utf-8"?> 17 <!DOCTYPE document [ 18 <!NOTATION jpg PUBLIC "image/jpeg"> 19 ]> 20 <document/> 21 XML; 22 23 // DOMDocumentオブジェクトをインスタンス化します。 24 $doc = new DOMDocument(); 25 26 // XML文字列を読み込みます。 27 $doc->loadXML($xmlString); 28 29 // ドキュメントタイプ定義(DTD)ノードを取得します。 30 $doctype = $doc->doctype; 31 32 // DTDからノーテーションのリストを取得し、その中から'jpg'という名前のものを取得します。 33 // $doctype->notations はノーテーションの集合(DOMNamedNodeMap)です。 34 // getNamedItem()は指定した名前のノードを返します。 35 $notation = $doctype->notations->getNamedItem('jpg'); 36 37 // 取得したノーテーションがDOMNotationのインスタンスであることを確認します。 38 if ($notation instanceof DOMNotation) { 39 // DOMNotation::nodeName プロパティは、DTDで定義されたノーテーション名を返します。 40 // この例では 'jpg' が出力されます。 41 echo $notation->nodeName . PHP_EOL; 42 } 43} 44 45// 関数を実行して結果を表示します。 46demonstrateDomNotationNodeName();
PHPのDOMNotation::nodeNameプロパティは、XML文書のDTD(文書型定義)内で宣言されたノーテーションの名前を取得するために使用します。このプロパティは読み取り専用で、引数はありません。戻り値として、ノーテーション名を表す文字列を返します。
サンプルコードでは、まず<!NOTATION jpg ...>という宣言を含むXML文字列を定義しています。この宣言の中のjpgが、nodeNameプロパティによって取得されるノーテーションの名前にあたります。
コードの処理の流れとしては、DOMDocumentクラスでXMLを読み込んだ後、doctypeプロパティから文書の型定義情報を取得します。次に、その中のnotationsプロパティとgetNamedItem('jpg')メソッドを使い、名前が'jpg'のノーテーションを表すDOMNotationオブジェクトを取得しています。
最後に、取得したDOMNotationオブジェクトのnodeNameプロパティにアクセスすると、DTDで定義されたノーテーションの名前が文字列として返されるため、実行結果として'jpg'が出力されます。このように、このプロパティを使うことで、特定のノーテーションの名前を簡単に知ることができます。
DOMNotationクラスのnodeNameプロパティは、XML要素のタグ名ではなく、DTD(文書型定義)内で<!NOTATION ...>と宣言されたノーテーションの名前を返します。この例では'jpg'がその名前にあたります。このオブジェクトは、DOMDocumentオブジェクトのdoctypeプロパティを通じて取得する点に注意が必要です。指定した名前のノーテーションが存在しない場合、getNamedItem()メソッドはnullを返すため、nodeNameプロパティにアクセスする前に、if文などでオブジェクトが取得できたかを必ず確認してください。この確認を怠るとエラーの原因となります。また、nodeNameは読み取り専用のため、値を変更することはできません。