当前位置: 首页> 最新文章列表> 如何通过 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 文件、需要修改结构或创建新文档。