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

【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\NotationnodeNameプロパティは常にその記法の名前を返し、読み取り専用であるため、値を変更することはできません。これにより、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オブジェクトを生成し、記法(jpeggif)を宣言したDTDを含むXML文字列を読み込んでいます。次にdoctypeプロパティを通じてDTDの情報にアクセスし、その中のnotationsプロパティから定義されている全ての記法のリストを取得します。ループ処理でリスト内の各Dom\Notationオブジェクトを取り出し、nodeNameプロパティを参照することで、DTDで<!NOTATION jpeg ...>のように定義された名前、この場合は "jpeg" や "gif" といった文字列を取得して表示しています。このようにnodeNameプロパティは、記法の名前を直接取得する際に使用します。

このコードは、XMLのDTD(文書型定義)で宣言された「記法(Notation)」という特殊な定義を扱うものです。nodeNameプロパティは、この記法の名前(サンプルでは"jpeg"や"gif")を文字列で取得します。注意点として、DTDを持たないXML文書では$document->doctypenullになるため、必ず存在チェックを行う必要があります。同様に、DTD内に記法の宣言がなければ$docType->notationsは空になるため、lengthプロパティでの確認が欠かせません。これらのチェックを怠ると、エラーの原因となります。また、nodeNameはプロパティのため、nodeName()のように関数として呼び出すとエラーになる点にも注意してください。

関連コンテンツ

関連プログラミング言語