PHP中的XML处理:DOMDocument、SimpleXML和XPath

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP中的XML处理:DOMDocument、SimpleXML和XPath

XML(可扩展标记语言)仍然是数据交换、配置存储以及与外部服务(RSS订阅、SOAP、API)集成的关键格式之一。PHP提供了几个强大的内置扩展用于处理XML。在本文中,我们将介绍三种主要方法:DOMDocument(文档对象模型)、SimpleXML(简单直观)和XPath(用于导航的查询语言)。



1. 准备工作:XML文档示例

所有示例将使用同一个XML文件 catalog.xml:

<?xml version="1.0" encoding="UTF-8"?><catalog>    <book id="1">        <title>PHP入门指南</title>        <author>伊万·彼得罗夫</author>        <price currency="RUB">1200</price>    </book>    <book id="2">        <title>XML详解</title>        <author>玛丽亚·西多罗娃</author>        <price currency="RUB">950</price>    </book></catalog>


2. DOMDocument — 对XML的完全控制

DOMDocument扩展实现了W3C DOM Level 2标准。它提供了最大程度的控制:可以创建、删除、修改任何节点、属性和文本内容。适用于需要精确控制结构的复杂场景。



加载和读取XML

<?php$dom = new DOMDocument();$dom->load('catalog.xml'); // 或 loadXML($xmlString)

$books = $dom->getElementsByTagName('book');foreach ($books as $book) { $id = $book->getAttribute('id'); $title = $book->getElementsByTagName('title')->item(0)->nodeValue; $author = $book->getElementsByTagName('author')->item(0)->nodeValue; $price = $book->getElementsByTagName('price')->item(0)->nodeValue; echo "图书 #$id: $title — $author, $price 卢布";}?>


创建新的XML

<?php$dom = new DOMDocument('1.0', 'UTF-8');$root = $dom->createElement('catalog');$dom->appendChild($root);

$book = $dom->createElement('book');$book->setAttribute('id', '3');$title = $dom->createElement('title', 'PHP与XML');$book->appendChild($title);$root->appendChild($book);

echo $dom->saveXML(); // 输出XML字符串// $dom->save('new_catalog.xml');?>


3. SimpleXML — 简单与便捷

SimpleXML是一个更轻量的扩展,它将XML转换为对象,通过属性访问元素。非常适合快速读取,特别是当XML结构已知且不需要精细调整时。



使用SimpleXML读取XML

<?php$xml = simplexml_load_file('catalog.xml'); // 或 simplexml_load_string($xmlString)

foreach ($xml->book as $book) { $id = (string)$book['id']; $title = (string)$book->title; $author = (string)$book->author; $price = (string)$book->price; echo "图书 #$id: $title — $author, $price 卢布";}?>


通过SimpleXML创建XML

<?php$xml = new SimpleXMLElement('<catalog></catalog>');$book = $xml->addChild('book');$book->addAttribute('id', '4');$book->addChild('title', 'SimpleXML指南');$book->addChild('price', 800)->addAttribute('currency', 'RUB');

echo $xml->asXML();// $xml->asXML('output.xml');?>


修改数据

<?php$xml = simplexml_load_file('catalog.xml');$xml->book[0]->price = 1300; // 修改第一本书的价格$xml->asXML('catalog_updated.xml');?>


4. XPath — 灵活的文档搜索

推荐