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

【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は読み取り専用のため、値を変更することはできません。

関連コンテンツ

関連プログラミング言語