📜  如何在PHP中将 XML 文件转换为数组?(1)

📅  最后修改于: 2023-12-03 14:52:47.712000             🧑  作者: Mango

如何在 PHP 中将 XML 文件转换为数组

在 PHP 中,我们经常需要将 XML 文件转换为数组以便于处理和操作。以下将介绍几种方法来实现这个目标。

方法一:使用 SimpleXML

SimpleXML 是 PHP 内置的一个扩展,可以很方便地将 XML 文件转换为对象或数组。

$xmlString = file_get_contents('path/to/xml/file.xml');
$xml = simplexml_load_string($xmlString, 'SimpleXMLElement', LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json, true);

上述代码首先使用 file_get_contents 函数读取 XML 文件内容,然后使用 simplexml_load_string 函数将 XML 字符串解析为 SimpleXMLElement 对象。由于 SimpleXML 对于 CDATA 数据的处理不够友好,我们使用 LIBXML_NOCDATA 参数来禁用对 CDATA 的解析。接着,我们将 SimpleXMLElement 对象转换为 JSON 字符串,再通过 json_decode 函数将 JSON 字符串转换为数组。

方法二:使用 DOMDocument

DOMDocument 是 PHP 内置的另一个扩展,也可以用于将 XML 文件转换为数组。

$xmlString = file_get_contents('path/to/xml/file.xml');
$document = new DOMDocument();
$document->loadXML($xmlString);
$json = json_encode(simplexml_import_dom($document));
$array = json_decode($json, true);

上述代码中,我们同样使用 file_get_contents 函数读取 XML 文件内容。然后,我们创建一个 DOMDocument 对象,并通过 loadXML 方法将 XML 字符串加载进来。接着,我们使用 simplexml_import_dom 函数将 DOMDocument 对象转换为 SimpleXMLElement 对象,然后再将其转换为 JSON 字符串和数组。

方法三:使用 XMLReader

XMLReader 是 PHP 内置的一个轻量级的读取 XML 数据的扩展。虽然比 SimpleXML 和 DOMDocument 更底层,但它的内存占用相对较低。

$xmlReader = new XMLReader();
$xmlReader->open('path/to/xml/file.xml');
$array = [];
while ($xmlReader->read()) {
    if ($xmlReader->nodeType == XMLReader::ELEMENT) {
        $elementName = $xmlReader->name;
        $xml = simplexml_import_dom($xmlReader->expand(), 'SimpleXMLElement', LIBXML_NOCDATA);
        $json = json_encode($xml);
        $array[$elementName] = json_decode($json, true);
    }
}
$xmlReader->close();

上述代码中,我们首先创建一个 XMLReader 对象,并通过 open 方法打开 XML 文件。然后,我们使用一个循环来遍历 XML 文件中的每个元素节点,并将其转换为 SimpleXMLElement 对象。接着,我们将 SimpleXMLElement 对象转换为 JSON 字符串和数组,并存入一个数组中。最后,我们关闭 XMLReader 对象。

注意事项
  • 以上方法都可以将 XML 文件转换为数组,你可以根据自己的项目需求选择适合的方法。
  • 可能需要根据 XML 文件的具体结构做一些调整和修改。
  • 确保服务器上的simplexml_load_stringDOMDocumentXMLReader等相关扩展已经安装和启用。

希望以上信息对你有所帮助!更多关于 XML 文件处理的内容,你可以参考 PHP 手册的相关部分。