現在の位置: ホーム> 最新記事一覧> XML_PARSEとPDOを使用してデータベース内のXMLデータを解析する方法

XML_PARSEとPDOを使用してデータベース内のXMLデータを解析する方法

M66 2025-04-26

最新のWebアプリケーションでは、データ形式の多様性により、開発者はXMLデータを処理する必要があることがよくあります。 XMLデータがデータベースに保存されている場合、PHPのXML_PARSE関数とPDOデータベース操作を使用して、自動解析と処理を実現できます。この記事では、このプロセスを詳細に紹介し、実行可能なコードの例を含めます。

ステップ1:データベースでXMLデータを準備します

XML_DATAという名前のテーブルがあるMySQLデータベースがあり、構造が次のとおりです。

 CREATE TABLE xml_data (
    id INT AUTO_INCREMENT PRIMARY KEY,
    xml_content TEXT NOT NULL
);

例としてXMLデータを挿入しましょう。

 INSERT INTO xml_data (xml_content) VALUES 
('<book><title>PHP プログラミングの練習</title><author>チャン・サン</author><url>https://m66.net/books/php</url></book>');

ステップ2:PDOを使用して、データベースからXMLデータを読み取る

<?php
$dsn = 'mysql:host=localhost;dbname=test_db;charset=utf8mb4';
$username = 'db_user';
$password = 'db_pass';

try {
    $pdo = new PDO($dsn, $username, $password);
    
    $stmt = $pdo->query("SELECT xml_content FROM xml_data");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $xml = $row['xml_content'];
        parseXmlWithHandler($xml);
    }

} catch (PDOException $e) {
    echo "データベース接続に失敗しました: " . $e->getMessage();
}
?>

ステップ3:XML_PARSEを使用してXMLデータを解析します

PHPのXML_PARSEは、イベント駆動型パーサーです。使用する前に、解析機能とプロセッサを定義する必要があります。

 function parseXmlWithHandler($xmlString) {
    $parser = xml_parser_create();

    xml_set_element_handler($parser, "startElement", "endElement");
    xml_set_character_data_handler($parser, "characterData");

    if (!xml_parse($parser, $xmlString, true)) {
        echo "XML 解析エラー: " . xml_error_string(xml_get_error_code($parser));
        return;
    }

    xml_parser_free($parser);
}

function startElement($parser, $name, $attrs) {
    echo "<b>タグを開始します:</b> $name<br>";
}

function endElement($parser, $name) {
    echo "<b>タグを終了します:</b> $name<br>";
}

function characterData($parser, $data) {
    $trimmed = trim($data);
    if ($trimmed !== '') {
        echo "<b>コンテンツ:</b> $trimmed<br>";
    }
}

ステップ4:出力サンプル結果

上記のスクリプトを実行した後、出力は次のようになります。

 タグを開始します:BOOK
タグを開始します:TITLE
コンテンツ:PHP プログラミングの練習
タグを終了します:TITLE
タグを開始します:AUTHOR
コンテンツ:チャン・サン
タグを終了します:AUTHOR
タグを開始します:URL
コンテンツ:https://m66.net/books/php
タグを終了します:URL
タグを終了します:BOOK