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