PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

PHP XML和数组互相转换详解

管理员 2025-02-21
工作总结
56

在 PHP 中,XML 和数组之间的互相转换是常见的操作。以下是详细的实现方法和示例代码。


1. XML 转数组

将 XML 数据转换为数组,可以使用 SimpleXML 或 DOMDocument

方法 1:使用 SimpleXML

SimpleXML 是一个简单易用的 XML 解析器。

示例代码

php
复制
<?php$xmlString = <<<XML<books>
    <book>
        <title>PHP Basics</title>
        <author>John Doe</author>
        <year>2021</year>
    </book>
    <book>
        <title>Advanced PHP</title>
        <author>Jane Smith</author>
        <year>2022</year>
    </book>
</books>XML;// 解析 XML 字符串$xml = simplexml_load_string($xmlString);// 将 SimpleXML 对象转换为数组$array = json_decode(json_encode($xml), true);print_r($array);?>

输出

plaintext
复制
Array
(
    [book] => Array
        (
            [0] => Array
                (
                    [title] => PHP Basics
                    [author] => John Doe
                    [year] => 2021
                )

            [1] => Array
                (
                    [title] => Advanced PHP
                    [author] => Jane Smith
                    [year] => 2022
                )
        )
)

方法 2:使用 DOMDocument

DOMDocument 是一个功能强大的 XML 解析器。

示例代码

php
复制
<?php$xmlString = <<<XML<books>
    <book>
        <title>PHP Basics</title>
        <author>John Doe</author>
        <year>2021</year>
    </book>
    <book>
        <title>Advanced PHP</title>
        <author>Jane Smith</author>
        <year>2022</year>
    </book>
</books>XML;// 创建 DOMDocument 对象$dom = new DOMDocument();$dom->loadXML($xmlString);// 将 DOMDocument 转换为数组function domToArray($node) {
    $array = [];
    foreach ($node->childNodes as $childNode) {
        if ($childNode->nodeType === XML_ELEMENT_NODE) {
            $array[$childNode->nodeName] = domToArray($childNode);
        } else {
            $array = $childNode->nodeValue;
        }
    }
    return $array;}$array = domToArray($dom);print_r($array);?>

输出

plaintext
复制
Array
(
    [books] => Array
        (
            [book] => Array
                (
                    [0] => Array
                        (
                            [title] => PHP Basics
                            [author] => John Doe
                            [year] => 2021
                        )

                    [1] => Array
                        (
                            [title] => Advanced PHP
                            [author] => Jane Smith
                            [year] => 2022
                        )
                )
        )
)

2. 数组转 XML

将数组转换为 XML 数据,可以使用 SimpleXML 或手动拼接 XML 字符串。

方法 1:使用 SimpleXML

SimpleXML 提供了创建 XML 数据的方法。

示例代码

php
复制
<?php$array = [
    'books' => [
        'book' => [
            [
                'title' => 'PHP Basics',
                'author' => 'John Doe',
                'year' => '2021',
            ],
            [
                'title' => 'Advanced PHP',
                'author' => 'Jane Smith',
                'year' => '2022',
            ],
        ],
    ],];// 创建 SimpleXMLElement 对象$xml = new SimpleXMLElement('<root/>');// 递归将数组转换为 XMLfunction arrayToXml($array, $xml) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            if (is_numeric($key)) {
                $key = 'item'; // 处理数字键
            }
            $subNode = $xml->addChild($key);
            arrayToXml($value, $subNode);
        } else {
            $xml->addChild($key, htmlspecialchars($value));
        }
    }}arrayToXml($array, $xml);// 输出 XMLecho $xml->asXML();?>

输出

xml
复制
<root>
    <books>
        <book>
            <title>PHP Basics</title>
            <author>John Doe</author>
            <year>2021</year>
        </book>
        <book>
            <title>Advanced PHP</title>
            <author>Jane Smith</author>
            <year>2022</year>
        </book>
    </books></root>

方法 2:手动拼接 XML 字符串

手动拼接 XML 字符串是一种灵活的方式。

示例代码

php
复制
<?php$array = [
    'books' => [
        'book' => [
            [
                'title' => 'PHP Basics',
                'author' => 'John Doe',
                'year' => '2021',
            ],
            [
                'title' => 'Advanced PHP',
                'author' => 'Jane Smith',
                'year' => '2022',
            ],
        ],
    ],];// 递归将数组转换为 XML 字符串function arrayToXmlString($array, $indent = '') {
    $xml = '';
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $xml .= "$indent<$key>\n";
            $xml .= arrayToXmlString($value, $indent . '    ');
            $xml .= "$indent</$key>\n";
        } else {
            $xml .= "$indent<$key>" . htmlspecialchars($value) . "</$key>\n";
        }
    }
    return $xml;}$xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";$xmlString .= arrayToXmlString($array);echo $xmlString;?>

输出

xml
复制
<?xml version="1.0" encoding="UTF-8"?><books>
    <book>
        <title>PHP Basics</title>
        <author>John Doe</author>
        <year>2021</year>
    </book>
    <book>
        <title>Advanced PHP</title>
        <author>Jane Smith</author>
        <year>2022</year>
    </book></books>

3. 总结

操作方法优点缺点
XML 转数组SimpleXML简单易用不适合复杂 XML 结构
XML 转数组DOMDocument功能强大代码复杂
数组转 XMLSimpleXML简单易用需要递归处理
数组转 XML手动拼接 XML 字符串灵活可控代码复杂

根据具体需求选择合适的方法:

  • 对于简单的 XML 和数组转换,推荐使用 SimpleXML

  • 对于复杂的 XML 结构,推荐使用 DOMDocument 或手动拼接 XML 字符串。




希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部