はじめに
PHP で XML を扱うときに登場する DOMDocument::loadXML() と saveXML()。
どちらも「XML文字列」を読み書きする重要な関数ですが、load() / save() と混同しやすいポイントでもあります。
本記事では、実際のコード例をもとに、試験で問われやすい動作と出力の違いを丁寧に解説します。
目次
🧩 DOMDocument::loadXML() とは?
loadXML() は 文字列として与えられたXMLを解析し、DOMツリーとして読み込む メソッドです。
public DOMDocument::loadXML(string $source, int $options = 0): bool- $source … XML形式の文字列を渡す
- 戻り値 … 成功時は
true、失敗時はfalse - 注意点 … 「ファイル」ではなく「文字列」から読み込む(
load()とは異なる)
💾 DOMDocument::saveXML() とは?
saveXML() は、DOMDocument内部のXMLツリーを 文字列として出力する メソッドです。
public DOMDocument::saveXML(?DOMNode $node = null, int $options = 0): string|false- $node … 省略するとドキュメント全体を出力
- 戻り値 … XML文字列。失敗時は false
- XMLを「ファイルに保存」したい場合は save() を使う
💻 実行例
<?php
declare(strict_types=1);
error_reporting(-1);
$xml = <<< 'XML'
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book>
<title>PHP8技術者認定初級試験公式問題集</title>
<author>野田貴子</author>
</book>
<book>
<title>PHP8技術者認定上級試験公式問題集</title>
<author>古圧道明</author>
</book>
</books>
XML;
$xobj = new DOMDocument();
$xobj->loadXML($xml);
echo $xobj->saveXML();✅ 出力結果
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>PHP8技術者認定初級試験公式問題集</title>
<author>野田貴子</author>
</book>
<book>
<title>PHP8技術者認定上級試験公式問題集</title>
<author>古圧道明</author>
</book>
</books>👉 この出力は 正しい動作結果 です。loadXML() で文字列を読み込み、saveXML() でDOMツリーを再び文字列化しています。
🧠 よくある混同ポイント
| メソッド名 | 入力 | 出力 | 主な用途 |
|---|---|---|---|
load() | XMLファイル | DOMツリー | XMLファイルを開く |
loadXML() | XML文字列 | DOMツリー | 文字列からXMLをパース |
save() | DOMツリー | XMLファイル | XMLをファイルに保存 |
saveXML() | DOMツリー | XML文字列 | XMLを文字列出力 |
🪶 図解:DOMDocumentによるXMLの流れ
+---------------------+
| XML文字列 |
| (例: $xml) |
+---------+-----------+
|
| loadXML()
v
+---------------------+
| DOMツリー構造 |
| (DOMDocument内部) |
+---------+-----------+
|
| saveXML()
v
+---------------------+
| XML文字列として出力 |
+---------------------+🏁 まとめ
loadXML()→ XML文字列を読み込んでDOM構造を作るsaveXML()→ DOM構造を文字列化して出力するload()/save()はファイル操作用である点に注意
