當前位置: 首頁> 最新文章列表> 如何通過xml_parse 與domxml 函數庫解析XML 數據

如何通過xml_parse 與domxml 函數庫解析XML 數據

M66 2025-05-12

在現代Web 應用開發中,XML(可擴展標記語言)作為數據交換格式之一,仍然在許多場景中廣泛應用。 PHP 提供了多種處理XML 的函數庫,其中xml_parsedomxml是兩種常見的解析方式,各自適用於不同的需求。本文將分別介紹這兩種方法,並提供實用代碼示例,幫助你高效掌握XML 數據的解析技巧。

一、使用xml_parse進行基於事件的解析

xml_parse是PHP 中的XML 解析器函數,屬於基於事件的解析方式(也稱為SAX 解析)。它在讀取XML 數據的過程中觸發特定的回調函數,適合處理大型XML 文件,因為它不需要將整個文檔加載進內存。

示例代碼:

 <?php
$xml_data = <<<XML
<books>
    <book>
        <title>PHP 編程實戰</title>
        <author>張三</author>
    </book>
    <book>
        <title>XML 與 Web 服務</title>
        <author>李四</author>
    </book>
</books>
XML;

$parser = xml_parser_create("UTF-8");

function startElement($parser, $name, $attrs) {
    echo "開始元素:$name\n";
}

function endElement($parser, $name) {
    echo "結束元素:$name\n";
}

function characterData($parser, $data) {
    $data = trim($data);
    if (!empty($data)) {
        echo "數據:$data\n";
    }
}

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

if (!xml_parse($parser, $xml_data, true)) {
    die("XML 解析錯誤:" . xml_error_string(xml_get_error_code($parser)));
}

xml_parser_free($parser);
?>

輸出結果:

 開始元素:BOOKS
開始元素:BOOK
開始元素:TITLE
數據:PHP 編程實戰
結束元素:TITLE
開始元素:AUTHOR
數據:張三
結束元素:AUTHOR
結束元素:BOOK
開始元素:BOOK
開始元素:TITLE
數據:XML 與 Web 服務
結束元素:TITLE
開始元素:AUTHOR
數據:李四
結束元素:AUTHOR
結束元素:BOOK
結束元素:BOOKS

優點與適用場景

  • 優點:解析速度快,內存佔用低。

  • 適用場景:大型XML 文件、僅需讀取而不修改XML 內容。

二、使用domxml進行基於文檔對像模型(DOM)的解析

domxml提供了一種更結構化的XML 處理方式,通過將整個XML 文檔加載為DOM 樹,可以像操作HTML DOM 一樣操作XML 數據。

注意:從PHP5 起, domxml被替換為DOM擴展(即DOMDocument 類),本文統一採用後者示例。

示例代碼:

 <?php
$xml_string = <<<XML
<books>
    <book>
        <title>PHP 編程實戰</title>
        <author>張三</author>
        <link>https://www.m66.net/book/php</link>
    </book>
    <book>
        <title>XML 與 Web 服務</title>
        <author>李四</author>
        <link>https://www.m66.net/book/xml</link>
    </book>
</books>
XML;

$doc = new DOMDocument();
$doc->loadXML($xml_string);

$books = $doc->getElementsByTagName("book");

foreach ($books as $book) {
    $title = $book->getElementsByTagName("title")->item(0)->nodeValue;
    $author = $book->getElementsByTagName("author")->item(0)->nodeValue;
    $link = $book->getElementsByTagName("link")->item(0)->nodeValue;

    echo "書名:$title\n";
    echo "作者:$author\n";
    echo "鏈接:$link\n\n";
}
?>

輸出結果:

 書名:PHP 編程實戰
作者:張三
鏈接:https://www.m66.net/book/php

書名:XML 與 Web 服務
作者:李四
鏈接:https://www.m66.net/book/xml

優點與適用場景

  • 優點:結構清晰,操作方便,適用於讀取、修改、生成XML。

  • 適用場景:小到中等體量的XML 文件、需要修改結構或創建新文檔。