1

我有以下名为“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”,因为这在我的应用程序中有效。

非常感谢,

罗素

4

1 回答 1

0

在 XML 中,自闭合元素(例如<foo />)等价于具有空内容的元素(例如 ),<foo></foo>因此如果您希望将其转换为 phpNULL值,则必须检查内容是否为空字符串。

给定您发布的示例,获得所需内容的一种简单方法是遍历文档中的每个元素,将数组键设置为适当的字符串,并将空字符串替换为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;
    }
}

这是一个现场演示。

于 2013-08-19T14:40:22.677 回答