php数组转xml转不回来

原创
ithorizon 6个月前 (10-18) 阅读数 54 #PHP

php 是一种非常强大的编程语言,用于 web 开发中获取和处理数据。xml 是一种标记语言,用于在 web 上存储和传输数据。在 php 中,我们可以使用数组作为数据结构将数据存储起来,然后将其转换为 xml 格式。但是,有时在将 xml 转换回 php 数组时可能会遇到问题。接下来,我们将探讨这个问题,并提供解决方案。

一、数组转 XML
在 PHP 中将数组转换为 XML 格式很简单。我们只需要遍历数组并使用 PHP 内置函数将其转换为 XML。下面是一个示例代码:

<?php $data = array(
    'name' => 'John',
    'age' =&gt; 30,
    'gender' =&gt; 'male'
);
$xml = new SimpleXMLElement('<data></data>');
array_walk_recursive($data, array($xml, 'addChild'));
echo $xml-&gt;asXML();
?&gt;
登录后复制

输出:

<?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 文档:

立即学习“PHP免费学习笔记(深入)”;

<?xml version="1.0"?><data><name>John</name><age>30</age><gender>male</gender></data>
登录后复制登录后复制

我们可以将其转换为 PHP 数组:

登录后复制

输出:

array(3) {
  ["name"]=&gt;
  string(4) "John"
  ["age"]=&gt;
  string(2) "30"
  ["gender"]=&gt;
  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) {
  ["company-name"]=&gt;
  string(8) "ABC Inc."
  ["employees"]=&gt;
  array(1) {
    ["employee"]=&gt;
    array(2) {
      [0]=&gt;
      string(4) "John"
      [1]=&gt;
      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"]=&gt;
  string(8) "ABC Inc."
  ["employees"]=&gt;
  array(1) {
    ["employee"]=&gt;
    array(2) {
      [0]=&gt;
      string(4) "John"
      [1]=&gt;
      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>
登录后复制登录后复制
登录后复制

代码实现了一种使用 SimpleXML 对象中的属性名称将 XML 转换为 PHP 数组的方法。在此示例中,包含属性的 XML 标记将转换为关联数组。例如,以下是我们的示例 XML 文档的输出:

array(2) {
  ["company-name"]=&gt;
  string(8) "ABC Inc."
  ["employees"]=&gt;
  array(2) {
    [0]=&gt;
    array(2) {
      ["@id"]=&gt;
      string(1) "1"
      ["name"]=&gt;
      string(4) "John"
    }
    [1]=&gt;
    array(2) {
      ["@id"]=&gt;
      string(1) "2"
      ["name"]=&gt;
      string(4) "Mike"
    }
  }
}
登录后复制

从输出中可以看出,该方法正确地将属性名称解析为关联数组,并将其与其他标记一起包含在同一数组中。

结论:

在 PHP 中,将数组转换为 XML 并将其转换回数组相对简单。但是,在将 XML 转换回 PHP 数组时可能会遇到问题,特别是属性名称中包含特殊字符的情况。使用 SimpleXML 对象中的属性名称可以解决此问题,因为在解析 XML 时会将其转换为关联数组。通过了解这些诀窍,您应该能够成功地在 PHP 中转换 XML 和数组之间的格式。

以上就是php数组转xml转不回来的详细内容,更多请关注IT视界其它相关文章!



热门