【PHP8.x】Dom\Notation::nodeNameプロパティの使い方
nodeNameプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
nodeNameプロパティは、Dom\Notationクラスのインスタンスが表すXML記法ノードの名前を保持するプロパティです。Dom\Notationクラスは、XML文書のDOCTYPE宣言内で定義される記法(Notation)をPHP上で表現するために使用されます。記法とは、XML文書内で外部の非XMLデータ形式を参照する際に、そのデータ形式を識別するための名前を定義するものです。
例えば、<!DOCTYPE document [<!NOTATION jpeg SYSTEM "image/jpeg">]>というXML宣言があった場合、Dom\NotationオブジェクトはこのNOTATION要素を表します。このとき、nodeNameプロパティは、この記法に与えられた名前である "jpeg" という文字列の値を保持します。
このプロパティは、DOM(Document Object Model)における基本的なノード情報のひとつであり、それぞれのノードのタイプに応じた名前を提供します。Dom\NotationのnodeNameプロパティは常にその記法の名前を返し、読み取り専用であるため、値を変更することはできません。これにより、DOMツリーを走査する際に、各記法ノードをその名前で識別し、プログラムで適切に処理することが可能になります。
構文(syntax)
1<?php 2 3$doc = new DOMDocument(); 4$doc->loadXML(<<<XML 5<!DOCTYPE root SYSTEM "my.dtd" [ 6 <!NOTATION mynotation SYSTEM "urn:example:mynotation"> 7]> 8<root/> 9XML); 10 11$doctype = $doc->doctype; 12$notation = $doctype->notations->getNamedItem('mynotation'); 13 14if ($notation instanceof Dom\Notation) { 15 echo $notation->nodeName; 16} 17 18?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
このプロパティは、ノードの名前を表す文字列を返します。
サンプルコード
PHP DOMDocumentでNotationノード名を取得する
1<?php 2 3/** 4 * XMLドキュメント内の記法(Notation)のノード名を取得して表示します。 5 * 6 * このサンプルは、Dom\NotationクラスのnodeNameプロパティの使用方法を示します。 7 * nodeNameプロパティは、DTDで定義された記法の名前(例: "jpeg")を返します。 8 */ 9function showNotationNodeNames(): void 10{ 11 // DTD(文書型定義)で2つの記法(jpeg, gif)を宣言したXML文字列 12 $xmlString = <<<XML 13 <?xml version="1.0" encoding="UTF-8"?> 14 <!DOCTYPE doc [ 15 <!NOTATION jpeg SYSTEM "image/jpeg"> 16 <!NOTATION gif SYSTEM "image/gif"> 17 ]> 18 <doc> 19 <content>Hello, World!</content> 20 </doc> 21 XML; 22 23 // DOMDocumentオブジェクトを作成してXMLを読み込む 24 $document = new DOMDocument(); 25 $document->loadXML($xmlString); 26 27 // DocumentTypeノード (<!DOCTYPE ...> の部分) を取得します。 28 // このノードにはDTDの情報が含まれています。 29 $docType = $document->doctype; 30 31 // DocumentTypeノードから、定義されている全ての記法のリストを取得します。 32 // $docType->notations は Dom\NamedNodeMap オブジェクトです。 33 if ($docType && $docType->notations->length > 0) { 34 echo "ドキュメントで定義されている記法(Notation)名:" . PHP_EOL; 35 36 // 記法を一つずつ取り出して処理します。 37 // ループ内の $notation は Dom\Notation オブジェクトです。 38 foreach ($docType->notations as $notation) { 39 // Dom\Notation オブジェクトの nodeName プロパティで記法名を取得して表示します。 40 // この例では "jpeg" と "gif" が出力されます。 41 echo '- ' . $notation->nodeName . PHP_EOL; 42 } 43 } else { 44 echo '記法(Notation)は見つかりませんでした。' . PHP_EOL; 45 } 46} 47 48// 関数を呼び出して実行します。 49showNotationNodeNames();
このPHPサンプルコードは、XML文書のDTD(文書型定義)内で宣言された「記法(Notation)」の名前を取得する方法を解説します。ここで使用するDom\NotationクラスのnodeNameプロパティは、記法の名前を取得するためのものです。
このプロパティは引数を持たず、アクセスすると記法の名前を文字列(string)として返します。サンプルコードでは、まずDOMDocumentオブジェクトを生成し、記法(jpegとgif)を宣言したDTDを含むXML文字列を読み込んでいます。次にdoctypeプロパティを通じてDTDの情報にアクセスし、その中のnotationsプロパティから定義されている全ての記法のリストを取得します。ループ処理でリスト内の各Dom\Notationオブジェクトを取り出し、nodeNameプロパティを参照することで、DTDで<!NOTATION jpeg ...>のように定義された名前、この場合は "jpeg" や "gif" といった文字列を取得して表示しています。このようにnodeNameプロパティは、記法の名前を直接取得する際に使用します。
このコードは、XMLのDTD(文書型定義)で宣言された「記法(Notation)」という特殊な定義を扱うものです。nodeNameプロパティは、この記法の名前(サンプルでは"jpeg"や"gif")を文字列で取得します。注意点として、DTDを持たないXML文書では$document->doctypeがnullになるため、必ず存在チェックを行う必要があります。同様に、DTD内に記法の宣言がなければ$docType->notationsは空になるため、lengthプロパティでの確認が欠かせません。これらのチェックを怠ると、エラーの原因となります。また、nodeNameはプロパティのため、nodeName()のように関数として呼び出すとエラーになる点にも注意してください。