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


