【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の保存に失敗した場合は、エラーメッセージを確認し、原因を特定してください。