在 PHP 中,XML 和数组之间的互相转换是常见的操作。以下是详细的实现方法和示例代码。
1. XML 转数组
将 XML 数据转换为数组,可以使用 SimpleXML
或 DOMDocument
。
方法 1:使用 SimpleXML
SimpleXML
是一个简单易用的 XML 解析器。
示例代码
<?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);?>
输出
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$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);?>
输出
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$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();?>
输出
<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$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 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 | 功能强大 | 代码复杂 |
数组转 XML | SimpleXML | 简单易用 | 需要递归处理 |
数组转 XML | 手动拼接 XML 字符串 | 灵活可控 | 代码复杂 |
根据具体需求选择合适的方法:
对于简单的 XML 和数组转换,推荐使用
SimpleXML
。对于复杂的 XML 结构,推荐使用
DOMDocument
或手动拼接 XML 字符串。
本文关键词: PHP XML 数组 互相 转换 详解
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。