現在の位置: ホーム> 最新記事一覧> XML_PARSEを使用して、動的に生成されたXMLデータを解析します

XML_PARSEを使用して、動的に生成されたXMLデータを解析します

M66 2025-05-11

PHPでは、dom、simplexml、またはXMLパーサーの使用など、XMLデータを解析する多くの方法があります。この記事では、XMLパーサーと組み合わせて基礎となるXML_PARSE()関数を使用して処理する方法を紹介します。

xml_parse()とは何ですか?

XML_PARSE()は、PHPのXML拡張機能の1つであり、解析のためにXML文字列をパーサーに送るために使用されます。 XML_PARSER_CREATE()XML_SET_ELEMENT_HANDLER()などの関数と組み合わせて使用​​され、ラベル構造を細かく制御する必要があるシナリオの処理に適しています。

サンプルシナリオ:リモートアドレスからXMLデータを取得します

XMLを動的に生成するインターフェイスがあるとします。

 https://api.m66.net/data/feed.xml

このアドレスからXMLデータを取得し、 <item>タグの下にタイトルリンクフィールドを解析する必要があります。

サンプルコード

<?php

// 初期化パーサー
$parser = xml_parser_create();

// データを保存するための配列
$parsedData = [];
$currentTag = '';
$currentItem = [];

// Startタグプロセッサを定義します
function startElement($parser, $name, $attrs) {
    global $currentTag, $currentItem;
    $currentTag = strtolower($name);
    if ($currentTag === 'item') {
        $currentItem = [];
    }
}

// エンドタグプロセッサを定義します
function endElement($parser, $name) {
    global $currentTag, $currentItem, $parsedData;
    if (strtolower($name) === 'item') {
        $parsedData[] = $currentItem;
    }
    $currentTag = '';
}

// 文字データプロセッサを定義します
function characterData($parser, $data) {
    global $currentTag, $currentItem;
    $data = trim($data);
    if (!$data) return;

    if ($currentTag === 'title') {
        $currentItem['title'] = (isset($currentItem['title']) ? $currentItem['title'] : '') . $data;
    } elseif ($currentTag === 'link') {
        $currentItem['link'] = (isset($currentItem['link']) ? $currentItem['link'] : '') . $data;
    }
}

// プロセッサをセットアップします
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

// リモコンから入手してください XML コンテンツ
$url = "https://api.m66.net/data/feed.xml";
$xmlData = file_get_contents($url);

if (!$xmlData) {
    die("取得できません XML データ");
}

// 解析を開始します
if (!xml_parse($parser, $xmlData, true)) {
    die(sprintf("XML 間違い: %s で %d わかりました",
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)));
}

// パーサーリソースをリリースします
xml_parser_free($parser);

// 出力結果
echo "<pre>";
print_r($parsedData);
echo "</pre>";
?>

出力の例

Array
(
    [0] => Array
        (
            [title] => サンプルタイトル1
            [link] => https://www.m66.net/item/123
        )
    [1] => Array
        (
            [title] => サンプルタイトル2
            [link] => https://www.m66.net/item/456
        )
)

まとめ

XML_PARSE()を使用して、XMLデータ構造を完全に制御し、複雑なまたは非標準構造XMLファイルに適しています。 SimplexMLほど簡潔ではありませんが、カスタム処理フローが必要なシナリオには非常に便利です。