提问者:小点点

php simplexml_load_file和CDATA数据完全丢失


我有以下xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<data>
   <item name="general.global.Event"><![CDATA[EVENT!]]></item>
   <item name="general.global.CompanyName"><![CDATA[some name]]></item>
   <item name="general.global.CompanyImprint"><![CDATA[Legal information]]></item>
</data>

我的代码如下

$xml = simplexml_load_file("general.xml") or die("Error: Cannot create object");
print_r($xml);

我的输出缺少CDATA。 怎么做?

SimpleXMLElement Object
(
[item] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [name] => general.global.Event
                    )

            )

        [1] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [name] => general.global.CompanyName
                    )

            )

        [2] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [name] => general.global.CompanyImprint
                    )

            )

    )


共2个答案

匿名用户

正在读取CDATA,阅读这个答案,您将看到如果您print_r($xml->asxml()); 解析器可以很好地重新编译CDATA信息。

由于某种原因,PHP的var_dumpprint_r没有XML对象的精确表示。 尝试此操作,您仍然可以访问数据:


foreach ($xml->item as $item) {
    if ('general.global.CompanyImprint' === (string)$item['name']) {
        var_dump((string)$item);
    }
}

// prints

string(17) "Legal information"

匿名用户

文本节点不使用print_r公开。

您可以看到这里的数据,您可以明确地查看它:

print $xml->item[0];