【问题标题】:PHP SimpleXML Load File with Null elements带有 Null 元素的 PHP SimpleXML 加载文件
【发布时间】:2013-08-20 11:35:29
【问题描述】:

我有以下名为“cookie_domain.xml”的 XML 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<setting>
    <parameter>cookie_domain</parameter>
    <displayname>Cookie Domain</displayname>
    <grouping>Sessions</grouping>
    <selecttype>text</selecttype>
    <setting />
    <help>Domain that the cookie is valid for</help>
</setting>

我使用以下方法加载到对象中:

$xml_object = simplexml_load_file('cookie_domain.xml');

问题是我希望“设置”元素为 XML 中指定的 null,但是当我将其转换为数组时,我从对象中得到的是:

Array
(
    [parameter] => cookie_domain
    [displayname] => Cookie Domain
    [grouping] => Sessions
    [selecttype] => text
    [setting] => SimpleXMLElement Object
        (
        )

    [help] => Domain that the cookie is valid for
)

有没有办法让 SimpleXML 尊重“null”值,而不是在其中放置一个“SimpleXMLElement Object”?所以我最终会得到:

Array
(
    [parameter] => cookie_domain
    [displayname] => Cookie Domain
    [grouping] => Sessions
    [selecttype] => text
    [setting] => 
    [help] => Domain that the cookie is valid for
)

我正在使用此信息导入数据库,并且对象导致问题,因为我需要元素存在,即使它是“null”,因为这在我的应用程序中有效。

非常感谢,

罗素

【问题讨论】:

  • 你如何(以及为什么)将它变成一个数组? SimpleXML不是设计用于将 XML 解析为数组,它为解析的 XML 提供了一个类似数组(也类似对象)的 API。

标签: simplexml php-5.4


【解决方案1】:

在 XML 中,一个自闭合元素(例如 &lt;foo /&gt;)等价于一个内容为空的元素(例如 &lt;foo&gt;&lt;/foo&gt;),因此如果您希望将其转换为 php NULL 值,则必须检查内容为空字符串。

根据您发布的示例,获得所需内容的一种简单方法是遍历文档中的每个元素,将数组键设置为适当的字符串,并将空字符串替换为 NULL

$settings_array = array();
foreach ( $xml_object->children() as $tag_name => $element )
{
    $settings_array[$tag_name] = trim( (string)$element );
    if ( strlen($settings_array[$tag_name]) == 0 )
    {
        $settings_array[$tag_name] = NULL;
    }
}

Here is a live demo.

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多