PHP で XML ファイルの作成や読み込み、要素の追加・修正を行う

PHP のバージョン 5 以降では、簡単に XML ファイルの操作が行えるようになっています。
ここでは、XML ファイルの作成は DOM を使用し、読み込みや要素の追加・修正などは SimpleXML 関数を使用することにします。

[adsense1]

DOM で XMLファイルを作成する

// インスタンスの生成
$dom = new DomDocument('1.0', 'UTF-8');
// prefs ノードを追加
$prefs = $dom->appendChild($dom->createElement('prefs'));

$pref = $prefs->appendChild($dom->createElement('pref'));
// code 属性の追加
$pref->setAttribute('code', '01');
// 要素ノードを追加してテキストを入れる
$pref->appendChild($dom->createElement('name', '北海道'));
$pref->appendChild($dom->createElement('capital', '札幌市'));

$pref = $prefs->appendChild($dom->createElement('pref'));
$pref->setAttribute('code', '02');
$pref->appendChild($dom->createElement('name', '青森県'));
$pref->appendChild($dom->createElement('capital', '青森市'));

//XML を整形(改行・字下げ)して出力
$dom->formatOutput = true;
//保存(上書き)
$dom->save('prefs.xml');

この PHP と同じ階層に prefs.xml というファイルが作成されます。
prefs.xml は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<prefs>
    <pref code="01">
        <name>北海道</name>
        <capital>札幌市</capital>
    </pref>
    <pref code="02">
        <name>青森県</name>
        <capital>青森市</capital>
    </pref>
</prefs>

SimpleXML で XMLファイルを読み込む

先ほど作成した prefs.xml ファイルを simplexml_load_file 関数で読み込みます。
simplexml_load_file の前にアットマークを付けて、正常に読み込めなかった場合でもエラーメッセージを表示させないようにしています。
PHP 関数の前についているアットマーク @ の意味

foreach 文ですべてのデータを読み込む

$filename = 'prefs.xml';
$xml = @simplexml_load_file($filename);
if ($xml) {
    // 正常に読み込めた場合の処理
    foreach ($xml->pref as $val) {
        $prefName[] = $val->name;
        $prefCapital[] = $val->capital;
        $prefCode[] = $val['code'];
    }
} else {
    // 読み込めなかった場合のエラー処理
}

これで以下のように値が取得できると思います。
 $prefName = array(‘北海道’, ‘青森県’)
 $prefCapital = array(‘札幌市’, ‘青森市’)
 $prefCode = array(’01’, ’02’)

指定した要素のデータを読み込む

青森県のデータのみ取得する場合は、foreach 文は使わずに以下のように記述します。

$prefName = $xml->pref[1]->name;
$prefCapital = $xml->pref[1]->capital;
$prefCode = $xml->pref[1]['code'];

青森県は上から2番目のデータなので pref[1] としています。
北海道の場合は pref[0] となります。

SimpleXML で XMLファイルの要素を追加する

simplexml_load_file 関数で読み込んだ XML に要素や属性を追加し、最後に XML ファイルを上書き保存します。

$filename = 'prefs.xml';
$xml = @simplexml_load_file($filename);
if ($xml) {
    // 正常に読み込めた場合の処理
    $addNode = $xml->addChild('pref');
    $addNode['code'] = '04';
    $addNode->addChild('name', '宮城県');
    $addNode->addChild('capital', '仙台市');
    //上書き保存
    $xml->asXml($filename);
} else {
    // 読み込めなかった場合のエラー処理
}

これで、出力された prefs.xml は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<prefs>
    <pref code="01">
        <name>北海道</name>
        <capital>札幌市</capital>
    </pref>
    <pref code="02">
        <name>青森県</name>
        <capital>青森市</capital>
    </pref>
    <pref code="04">
        <name>宮城県</name>
        <capital>仙台市</capital>
    </pref>
</prefs>

SimpleXML で XMLファイルの要素を修正する

追加の時と同じように、simplexml_load_file 関数で読み込んだ XML の要素や属性を修正し、最後に XML ファイルを上書き保存します。

$filename = 'prefs.xml';
$xml = @simplexml_load_file($filename);
if ($xml) {
    // 正常に読み込めた場合の処理
    $xml->pref[2]['code'] = '03';
    $xml->pref[2]->name = '岩手県';
    $xml->pref[2]->capital = '盛岡市';
    //上書き保存
    $xml->asXml($filename);
} else {
    // 読み込めなかった場合のエラー処理
}

これで、出力された prefs.xml は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<prefs>
    <pref code="01">
        <name>北海道</name>
        <capital>札幌市</capital>
    </pref>
    <pref code="02">
        <name>青森県</name>
        <capital>青森市</capital>
    </pref>
    <pref code="03">
        <name>岩手県</name>
        <capital>盛岡市</capital>
    </pref>
</prefs>

[adsense2]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください