📅  最后修改于: 2023-12-03 14:52:47.712000             🧑  作者: Mango
在 PHP 中,我们经常需要将 XML 文件转换为数组以便于处理和操作。以下将介绍几种方法来实现这个目标。
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 是 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 是 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 对象。
simplexml_load_string
、DOMDocument
、XMLReader
等相关扩展已经安装和启用。希望以上信息对你有所帮助!更多关于 XML 文件处理的内容,你可以参考 PHP 手册的相关部分。