當前位置: 首頁> 最新文章列表> 如何在PHP 中結合使用xml_parse 和PDO 來解析數據庫中的XML 數據?

如何在PHP 中結合使用xml_parse 和PDO 來解析數據庫中的XML 數據?

M66 2025-04-26

在現代Web 應用中,數據格式的多樣性使得開發者經常需要處理XML 數據。若XML 數據保存在數據庫中,我們可以使用PHP 的xml_parse函數和PDO 數據庫操作結合來實現自動解析與處理。本文將詳細介紹這一過程,並附上可運行的代碼示例。

第一步:準備數據庫中的XML 數據

假設我們有一個MySQL 數據庫,其中有一個表名為xml_data ,結構如下:

 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>');

第二步:使用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();
}
?>

第三步:使用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>";
    }
}

第四步:輸出示例結果

運行以上腳本後,輸出將會類似於:

 開始標籤:BOOK
開始標籤:TITLE
內容:PHP 編程實戰
結束標籤:TITLE
開始標籤:AUTHOR
內容:張三
結束標籤:AUTHOR
開始標籤:URL
內容:https://m66.net/books/php
結束標籤:URL
結束標籤:BOOK