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

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

作成日: 更新日:

基本的な使い方

Dom\DocumentFragmentクラスのC14NFileメソッドは、ドキュメントフラグメントノードを、指定されたファイルへ、W3C勧告のCanonical XML形式でシリアライズ(書き出し)するメソッドです。このメソッドを使用することで、XMLドキュメントの一部であるドキュメントフラグメントを、特定の形式でファイルに保存できます。

C14NFileメソッドは、引数として出力先のファイルパスを受け取ります。また、オプションとして、排他的な正規化を行うかどうか、コメントを含めるかどうか、指定された接頭辞のリストを使用するかどうかといったフラグを設定できます。これらのオプションを適切に設定することで、Canonical XML形式の詳細な制御が可能になります。

具体的には、$exclusiveパラメータで排他的な正規化を行うかどうかを指定し、$with_commentsパラメータでコメントを含めるかどうかを指定します。$xpathパラメータでは、正規化の範囲をXPath式で指定できます。$ns_prefixesパラメータでは、正規化の際に使用する名前空間接頭辞のリストを指定できます。

C14NFileメソッドは、システムのファイル操作を行うため、適切なファイルアクセス権限が必要です。また、出力先のファイルが存在しない場合は、新たにファイルが作成されます。ファイルが存在する場合は、上書きされますので、注意が必要です。

このメソッドを使用することで、XMLドキュメントの一部を他のシステムやアプリケーションと互換性のある形式で共有したり、永続化したりすることが容易になります。特に、XML署名やセキュリティ関連の処理を行う場合に、Canonical XML形式は重要な役割を果たします。

構文(syntax)

1<?php
2
3$dom = new DOMDocument();
4// XMLコンテンツをロードするなどの初期化処理
5// 例: $dom->loadXML('<root><item>Hello</item></root>');
6
7// C14NFileメソッドの呼び出し構文
8// string $uri: 正規化されたXMLを保存するファイルのパス
9// bool $canonicalize: trueを指定すると排他的正規化、false (デフォルト) は包含的正規化
10// array $inclusive_namespaces: 包含的正規化の場合に含める名前空間URIの配列
11$result = $dom->C14NFile('output.xml', true);
12
13// $result には、書き込まれたバイト数、または失敗した場合に false が格納されます。

引数(parameters)

string $uri, bool $exclusive = false, bool $with_comments = false, ?array $xpath = null, ?array $ns_prefixes = null

  • string $uri: 正規化するXMLドキュメントのURIを指定します。
  • bool $exclusive = false: 排他的な正規化を行うかどうかを指定します。trueの場合、指定されたXPath式に一致するノードのみを正規化します。
  • bool $with_comments = false: コメントを含めて正規化するかどうかを指定します。trueの場合、コメントも正規化対象となります。
  • ?array $xpath = null: 排他的な正規化を行う場合に、正規化対象とするノードを指定するためのXPath式の配列です。
  • ?array $ns_prefixes = null: XPath式で使用する名前空間のプレフィックスとURIの対応を指定する連想配列です。

戻り値(return)

int|false

C14NFileメソッドは、XML文書フラグメントを正規化し、その結果をバイト数で返します。正規化が成功した場合はバイト数を、失敗した場合はfalseを返します。

関連コンテンツ

【PHP8.x】C14NFileメソッドの使い方 | いっしー@Webエンジニア