• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

使SimpleXML将XML解析为PHP中的数组

在这篇文章中,您将学习如何在 php 中将 XML 解析为数组。SimpleXML 是一个使这成为可能的 PHP 扩展。

在您的日常 PHP 开发中,有时您需要处理 XML 内容。无论是将数据导出为 XML 文档还是在应用程序中处理传入的 XML 文档,拥有一个可以顺利执行这些操作的库总是很方便的。在 PHP 中处理 XML 时,有不同的方法可供选择。事实上,PHP 中有不同的扩展可让您读取和解析 XML 文档。

PHP 的 XML 解析器基于 James Clark 的 expat 库,这是一个用 C 编写的面向流的 XML 库。这个 XML 解析器库允许您解析 XML 文档,但它不能验证它们的日期。它是基于事件和面向流的,因此在处理非常大的 XML 文件时非常有用,但比处理小文件所需的复杂一点。

另一个选项是 SimpleXML 扩展,它是 PHP 社区用来处理 XML 文档的最流行的扩展之一。SimpleXML 扩展允许您非常轻松地解析 XML 文档,就像您在 PHP 中读取文件一样。

在本文中,我们将使用 SimpleXML 扩展来演示如何将 XML 内容转换为数组。如果您想按照本文中的示例进行操作,请确保您已在 PHP 安装中安装了 SimpleXML 扩展。

SimpleXML PHP 扩展

SimpleXML PHP 扩展提供了一个完整的工具集,您可以使用它在 PHP 应用程序中读取、写入和解析 XML 文档。需要注意的是,SimpleXML 扩展至少需要PHP 5。此外,它还需要 libxml PHP 扩展。

SimpleXML 扩展默认是启用的,但是如果您想检查它是否在您的 PHP 安装中启用,您可以使用该phpinfo() 功能快速检查它。

使SimpleXML将XML解析为PHP中的数组  第1张

如您所见,您应该在phpinfo() 函数的输出中看到 SimpleXML 部分。

SimpleXML 扩展提供了不同的函数,您可以使用它们来读取和解析 XML 内容。

使用 SimpleXML 加载 XML 字符串或文件

例如,如果要解析 XML 文件,可以使用该simplexml_load_file() 函数。该simplexml_load_file() 函数允许您在一次调用中读取和解析 XML 文件。另一方面,如果您有一个想要转换为 XML 文档对象的 XML 字符串,则可以使用该simplexml_load_string() 函数。

您还可以使用该file_get_contents() 函数读取文件内容并将生成的字符串传递给simplexml_load_string()函数,该函数最终将其解析为一个对象。或者,如果您更喜欢面向对象的方式,您还可以使用SimpleXMLElement类及其实用方法将 XML 字符串转换为对象。

在本文中,我们将使用该simplexml_load_file()函数读取 XML 文件,并了解如何将其转换为数组。接下来,我们将通过一个真实的示例来演示如何做到这一点。

如何使用 PHP 将 XML 转换为数组

在本节中,我们将了解如何将 XML 内容转换为数组。

首先,让我们快速完成在 SimpleXML 扩展的帮助下将 XML 内容转换为数组所需遵循的步骤。

  • 读取文件内容并解析它们。在这一步结束时,内容被解析并转换为SimpleXMLElement对象格式。我们将使用该simplexml_load_file()函数来实现这一点。

  • 接下来,您需要SimpleXMLElement使用该json_encode()函数将对象转换为 JSON 表示。

  • 最后,您需要使用该json_decode()函数对 JSON 内容进行解码,以便最终生成一个包含所有文档的数组。

出于演示目的,假设我们有一个 XML 文件,如以下代码段所示。我们将其命名为employees.xml。它包含所有员工的基本详细信息。我们的目标是将其转换为可用于进一步处理的数组。

<?xml version='1.0'?>   
<employees>   
    <employee id="1">
        <name>John</name>   
        <email>john@example.com</email>
        <address>
           <street>3201  Glendale Avenue</street>
           <city>Los Angeles</city>
           <state>CA</state>
        </address>
    </employee>
    <employee id="2">
        <name>Mike</name>
        <email>mike@example.com</email>
        <address>
           <street>781  Stroop Hill Road</street>
           <city>Duluth</city>
           <state>GA</state>
        </address>
    </employee>
</employees>

如您所见,employees.xml文件包含员工的姓名和电子邮件。重要的是要注意该employee-id值是作为<employee>标签的属性传递的。

接下来,使用以下内容创建simplexml.php文件。

<?php
libxml_use_internal_errors(TRUE);

$objXmlDocument = simplexml_load_file("employees.xml");

if ($objXmlDocument === FALSE) {
    echo "There were errors parsing the XML file.\n";
    foreach(libxml_get_errors() as $error) {
        echo $error->message;
    }
    exit;
}

$objJsonDocument = json_encode($objXmlDocument);
$arrOutput = json_decode($objJsonDocument, TRUE);

echo "<pre>";
print_r($arrOutput);
?>

让我们通过上面示例中的重要片段来了解它是如何工作的。

读取和解析 XML 文件

首先,我们使用该libxml_use_internal_errors()功能禁用标准 libxml 错误并启用用户错误处理。通过这种方式,我们可以在解析过程中捕获 XML 错误并以用户友好的方式显示它们。这在开发阶段也非常有用。

接下来,我们使用该simplexml_load_file() 函数来读取和解析employees.xml文件。该simplexml_load_file()函数的第一个参数是 XML 文件的路径。需要注意的是,您需要根据需要调整此路径。在上面的示例中,假设employees.xml文件与simplexml.php文件位于同一目录级别。如果XML文件解析成功,则返回SimpleXMLElement该类的一个对象;否则,它返回FALSE。

接下来,如果$objXmlDocument 变量设置为FALSE,则解析employees.xml文件时出现问题。在这种情况下,我们使用该libxml_get_errors()函数获取所有错误并显示它们以进行调试。如果 employees.xml 文件解析成功,则该$objXmlDocument 变量设置为。TRUE

将SimpleXMLElement对象转换为其 JSON 表示形式

接下来,我们使用该json_encode()函数将SimpleXMLElement对象转换为其 JSON 表示形式。我们已将 JSON 字符串存储在$objJsonDocument变量中,如以下代码段所示。

$objJsonDocument = json_encode($objXmlDocument);

将 JSON 字符串解码为数组

最后,我们使用该json_decode() 函数来解码 JSON 字符串数据。需要注意的是,我们传入TRUE了json_decode()函数的第二个参数,它将所有对象转换为关联数组。

$arrOutput = json_decode($objJsonDocument, TRUE);

如果您没有传入TRUE第二个参数,该json_decode函数将生成类型对象 StdClass 而不是数组。

这就是整个过程的概要。让我们运行simplexml.php文件,您应该会看到以下输出。

Array
(
    [employee] => Array
        (
            [0] => Array
                (
                    [@attributes] => Array
                        (
                            [id] => 1
                        )
                    [name] => John
                    [email] => john@example.com
                    [address] => Array
                        (
                            [street] => 3201  Glendale Avenue
                            [city] => Los Angeles
                            [state] => CA
                        )
                )

            [1] => Array
                (
                    [@attributes] => Array
                        (
                            [id] => 2
                        )
                    [name] => Mike
                    [email] => mike@example.com
                    [address] => Array
                        (
                            [street] => 781  Stroop Hill Road
                            [city] => Duluth
                            [state] => GA
                        )
                )
        )
)

正如所料,该数组包含所有文档。您可能已经注意到,它还解析了id字段,该字段以属性的形式附加到每个文档中,您可以通过@attributes键访问它,如上面的输出所示。基本上,一切都以键值对的形式提供。因此,您可以使用完整的阵列进行进一步处理。

这就是在 PHP 中将 XML 内容转换为数组的方法。这是一个非常简单的示例,但它应该让您对整个过程有所了解。

结论

在本文中,我们讨论了如何使用 PHP 和 SimpleXML 将 XML 文件转换为数组。在解析和操作 XML 文档时,SimpleXML 扩展非常有用。 


文章目录
  • SimpleXML PHP 扩展
      • 使用 SimpleXML 加载 XML 字符串或文件
  • 如何使用 PHP 将 XML 转换为数组
    • 读取和解析 XML 文件
    • 将SimpleXMLElement对象转换为其 JSON 表示形式
    • 将 JSON 字符串解码为数组
  • 结论