一、数组转 xml
在 php 中将数组转换为 xml 格式很简单。我们只需要遍历数组并使用 php 内置函数将其转换为 xml。下面是一个示例代码:
<?php$data = array( 'name' => 'john', 'age' => 30, 'gender' => 'male');$xml = new simplexmlelement('<data/>');array_walk_recursive($data, array($xml, 'addchild'));echo $xml->asxml();?>
输出:
<?xml version="1.0"?><data> <name>john</name> <age>30</age> <gender>male</gender></data>
我们可以使用 simplexmlelement 类来创建新的 xml 文档。然后将数组数据添加到 xml 标记中。
二、 xml 转数组
将 xml 转换回 php 数组相对麻烦一些。php 内置函数不支持此功能。但是,simplexml 扩展提供了一种解析 xml 的方法,并将其转换为对象。在这个对象中,我们可以使用属性名称获取其值。例如,以下是一个示例 xml 文档:
<?xml version="1.0"?><data> <name>john</name> <age>30</age> <gender>male</gender></data>
我们可以将其转换为 php 数组:
string(4) male}
我们使用 simplexml_load_string 函数将 xml 字符串转换为 simplexml 对象,然后使用 php 内置 json_encode 函数将其转换为 json 字符串。最后使用 json_decode 函数将 json 字符串转换为数组。
三、 xml 转换回数组时的问题
如果我们在将 xml 转换为 php 数组时遇到问题,这可能是因为 simplexml 对象的属性名称中包含了特殊字符。例如,以下是一个示例 xml 文档:
<?xml version="1.0"?><data> <company-name>abc inc.</company-name> <employees> <employee id="1">john</employee> <employee id="2">mike</employee> </employees></data>
以下是尝试将此 xml 转换为 php 数组的示例代码:
array(2) { [0]=> string(4) john [1]=> string(4) mike } }}
在输出中,employee 作为一个数组返回,而不是包含 employee 名称和属性的关联数组。这是因为属性名称中的减号 - 会导致关联数组的键名称错误。例如,我们可以将 company-name 更改为 company_name 然后运行相同的代码。以下是示例:
<?xml version="1.0"?><data> <company_name>abc inc.</company_name> <employees> <employee id="1">john</employee> <employee id="2">mike</employee> </employees></data>
以下是输出:
array(2) { [company_name]=> string(8) abc inc. [employees]=> array(1) { [employee]=> array(2) { [0]=> string(4) john [1]=> string(4) mike } }}
在这个输出中,employee 作为关联数组返回,并包括 employee 名称和属性。
解决此问题的方法是使用 simplexml 对象中的属性名称而不是作为键名称。以下是一个带有特殊字符的示例 xml 文档和 php 代码:
<?xml version="1.0"?><data> <company-name>abc inc.</company-name> <employees> <employee id="1">john</employee> <employee id="2">mike</employee> </employees></data>
$childvalue) { $data = array(); foreach ($childvalue->attributes() as $attributename => $attributevalue) { $data[@ . $attributename] = (string) $attributevalue; } $data[name] = $childvalue->__tostring(); if (!isset($result[$key]) || !is_array($result[$key])) { $result[$key] = array(); } array_push($result[$key], $data); } } else { $data = (string) $value; if (isset($result[$key])) { if (!is_array($result[$key])) { $result[$key] = array($result[$key]); } array_push($result[$key], $data); } else { $result[$key] = $data; } }}var_dump($result);?>
代码实现了一种使用 simplexml 对象中的属性名称将 xml 转换为 php 数组的方法。在此示例中,包含属性的 xml 标记将转换为关联数组。例如,以下是我们的示例 xml 文档的输出:
array(2) { [company-name]=> string(8) abc inc. [employees]=> array(2) { [0]=> array(2) { [@id]=> string(1) 1 [name]=> string(4) john } [1]=> array(2) { [@id]=> string(1) 2 [name]=> string(4) mike } }}
从输出中可以看出,该方法正确地将属性名称解析为关联数组,并将其与其他标记一起包含在同一数组中。
结论:
在 php 中,将数组转换为 xml 并将其转换回数组相对简单。但是,在将 xml 转换回 php 数组时可能会遇到问题,特别是属性名称中包含特殊字符的情况。使用 simplexml 对象中的属性名称可以解决此问题,因为在解析 xml 时会将其转换为关联数组。通过了解这些诀窍,您应该能够成功地在 php 中转换 xml 和数组之间的格式。
以上就是php数组转xml转不回来的详细内容。
