【PHP8.x】C14NFileメソッドの使い方

C14NFileメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

C14NFileメソッドは、DOMDocumentTypeクラスが表すXML文書のDOCTYPEノードの内容を、Canonical XML(正規化XML)の規則に基づいて標準化し、その結果を指定されたファイルに書き出すメソッドです。XML文書の正規化とは、文書の内容を変更することなく、改行、空白文字、属性の順序などを特定の標準的な形式に変換する処理を指します。これにより、異なる環境やツールで作成されたXML文書であっても、その実質的な内容が同一であるかを正確に比較したり、電子署名などのセキュリティ関連の操作において文書の同一性を保証したりすることが可能になります。

このC14NFileメソッドは、特にXML文書のDOCTYPE宣言部分に着目し、それを正規化された一貫性のある表現でファイルに出力する機能を提供します。例えば、DOCTYPE宣言に含まれる公開識別子やシステム識別子、または内部DTDサブセットの記述などが、Canonical XMLのルールに従って調整され、指定されたファイルパスへと保存されます。これにより、DOCTYPE宣言のみを対象とした厳密な比較や検証が必要な場面で役立ちます。メソッドの利用時には、出力先のファイルパスと、必要に応じて排他的正規化の有無やXMLコメントを含めるかどうかといった詳細なオプションを指定できます。

構文(syntax)

1<?php
2
3// DOMDocumentType クラスのインスタンス $domDocumentType が存在すると仮定します。
4// (通常は DOMDocument::doctype プロパティから取得します)
5// 例:
6// $dom = new DOMDocument();
7// $dom->loadXML('<!DOCTYPE mydoctype SYSTEM "foo.dtd"><root/>');
8// $domDocumentType = $dom->doctype;
9
10// DOMDocumentType::C14NFile メソッドの呼び出し構文
11$bytesWritten = $domDocumentType->C14NFile(
12    'path/to/output.xml', // string $uri: 正規化されたXMLの出力先ファイルパス
13    false,               // bool $exclusive: 排他的C14Nを使用するかどうか (デフォルト: false)
14    false,               // bool $with_comments: コメントを含めるかどうか (デフォルト: false)
15    null,                // ?array $xpath: 正規化するノードを絞り込むXPath式の配列 (デフォルト: null)
16    null                 // ?array $ns_prefixes: XPathで使用する名前空間プレフィックスの配列 (デフォルト: null)
17);
18// 戻り値: int|false (ファイルに書き込まれたバイト数、または失敗時は false を返します)

引数(parameters)

string $uri, bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null

  • string $uri: C14N化するXMLドキュメントのURIを指定する文字列
  • bool $exclusive = false: 排他的C14N化を行うかどうかを指定する真偽値。デフォルトはfalse(排他的C14N化を行わない)。
  • bool $withComments = false: コメントを含めてC14N化するかどうかを指定する真偽値。デフォルトはfalse(コメントを含めない)。
  • ?array $xpath = null: C14N化の対象をXPath式で絞り込むための配列。nullの場合は全て対象となる。
  • ?array $nsPrefixes = null: C14N化の対象となる名前空間プレフィックスを指定する配列。nullの場合は全て対象となる。

戻り値(return)

戻り値なし

戻り値はありません

関連コンテンツ

関連プログラミング言語