PHP SimpleXML加载文件与Null元素

时间:2013-08-18 15:39:02

标签: simplexml php-5.4

我有以下名为'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');

问题在于我希望'setting'元素在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对象'?所以我最终得到:

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

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

非常感谢,

罗素

1 个答案:

答案 0 :(得分:0)

在XML中,自闭元素(例如<foo />)等同于具有空内容的元素(例如<foo></foo>),因此如果您希望将其翻译为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.