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

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

作成日: 更新日:

基本的な使い方

saveXmlメソッドは、Dom\HTMLDocumentクラスに属するメソッドで、DOMドキュメントをXML文字列として保存するために使用されます。このメソッドは、ドキュメント全体または指定されたノードをXML形式の文字列にシリアライズ(直列化)し、その結果を返します。

具体的には、HTMLドキュメントの構造(要素、属性、テキストなど)をXMLの形式で表現した文字列を生成します。この際、XML宣言(<?xml version="1.0"?>)や文字エンコーディング(charset)の情報も含まれる場合があります。

saveXmlメソッドは、引数としてオプションでノードを指定できます。ノードを指定した場合、そのノードの子孫ノードのみがXML文字列として保存されます。ノードが指定されない場合、ドキュメント全体が保存されます。

このメソッドは、ドキュメントの内容をファイルに保存するのではなく、単に文字列として取得する点がsaveメソッド(ファイルに書き込む)と異なります。取得したXML文字列は、例えばデータベースに格納したり、ネットワーク経由で送信したり、他のプログラムで処理したりする用途に利用できます。

また、saveXmlメソッドは、整形式(well-formed)なXMLを生成することを保証します。これは、XMLの構文規則に従っていることを意味し、これにより、他のXMLパーサーで正しく解析できるようになります。

システムエンジニアを目指す初心者の方は、このメソッドを利用することで、HTMLドキュメントをプログラムで扱いやすいXML形式に変換し、様々な処理に応用できることを理解しておくと良いでしょう。

構文(syntax)

1Dom\HTMLDocument::saveXml(?string $filename = null, int $options = 0): string|false

引数(parameters)

?\Dom\Node $node = null, int $options = 0

  • ?\Dom\Node $node = null: 保存するDOMノード。省略するとドキュメント全体が保存されます。
  • int $options = 0: 保存時のオプションを指定する整数。

戻り値(return)

string|false

HTMLドキュメント全体をXML形式の文字列として取得します。処理に失敗した場合はfalseを返します。

サンプルコード

PHP DomDocument::saveXML で整形XMLを出力する

1<?php
2
3// Dom\HTMLDocument の saveXML メソッドのサンプルコード
4// 指定されたノードまたはドキュメント全体をXMLとして保存します。
5// pretty オプションを使用して、整形されたXMLを出力します。
6
7$dom = new DOMDocument('1.0', 'UTF-8');
8$dom->preserveWhiteSpace = false;
9$dom->formatOutput = true; // prettyオプションの代替
10
11// ルート要素を作成
12$root = $dom->createElement('root');
13$dom->appendChild($root);
14
15// 子要素を作成
16$child = $dom->createElement('child');
17$child->textContent = 'Hello, World!';
18$root->appendChild($child);
19
20// XMLとして保存
21$xmlString = $dom->saveXML();
22
23if ($xmlString) {
24    echo $xmlString . PHP_EOL;
25} else {
26    echo "XMLの保存に失敗しました。" . PHP_EOL;
27}
28
29// 特定のノードを保存する場合
30$dom2 = new DOMDocument();
31$dom2->loadHTML('<!DOCTYPE html><html><body><h1>Hello</h1><p>World</p></body></html>');
32$body = $dom2->getElementsByTagName('body')->item(0);
33
34if ($body) {
35    $bodyXml = $dom2->saveXML($body);
36    echo $bodyXml . PHP_EOL;
37} else {
38    echo "Body要素が見つかりませんでした。" . PHP_EOL;
39}
40
41?>

PHPのDom\HTMLDocumentクラスのsaveXMLメソッドは、指定されたノード、またはドキュメント全体をXML形式の文字列として保存するために使用します。引数 $node には、保存したいノードを指定します。省略した場合は、ドキュメント全体が保存されます。$options はオプションのフラグで、XMLの保存形式を制御できますが、このサンプルコードでは使用していません。saveXMLメソッドは、XML形式の文字列を返し、保存に失敗した場合は false を返します。

サンプルコードでは、まずDOMDocumentオブジェクトを作成し、ルート要素と子要素を追加して簡単なXMLドキュメントを構築しています。$dom->formatOutput = true; は、prettyオプションと同様に、XMLを整形して見やすく出力するための設定です。saveXML() を呼び出すことで、構築したXMLドキュメントが文字列として $xmlString に格納されます。

次に、HTMLドキュメントから特定のノード(body要素)を抽出し、そのノードのみをXMLとして保存する例を示しています。$dom2->saveXML($body) のように、引数にノードを指定することで、ドキュメント全体ではなく、特定の要素だけをXMLとして保存できます。

saveXMLメソッドを使用することで、DOMドキュメントやその一部を簡単にXML形式の文字列に変換し、ファイルへの書き出しやデータベースへの保存など、様々な用途に利用できます。XMLの構造をプログラムで操作し、その結果をXML形式で出力したい場合に非常に便利なメソッドです。

Dom\HTMLDocument::saveXML()メソッドは、XML形式の文字列を生成します。引数にノードを指定すると、そのノード以下をXMLとして出力します。ノードがnullの場合は、ドキュメント全体が出力されます。戻り値は文字列または失敗時にfalseです。

prettyオプションは直接指定できませんが、DOMDocumentクラスのformatOutputプロパティをtrueに設定することで、整形されたXMLを出力できます。

saveXML()は、HTMLドキュメントをXMLとして扱うため、HTMLの構造によっては予期しない結果になることがあります。特定のノードを保存する場合は、ノードが存在するかどうかを事前に確認しましょう。また、文字エンコーディングにも注意し、UTF-8を使用することを推奨します。XMLの保存に失敗した場合は、エラーメッセージを確認し、原因を特定してください。