SimpleXMLElement正在删除属性(php 7.2)

时间:2018-12-05 13:34:55

标签: php xml attributes simplexml

有人知道为什么SimpleXMLElement删除XML中的属性吗?

我有如下所示的XML数据(请注意翻译的“语言”属性):

<events> 
 <event id="d8f17143-0c67-48aa-a7f1-003a5ddbd28f"> 
    <details> 
        <names> 
            <translation language="en">English title</translation> 
            <translation language="de">German title</translation> 
        </names> 
    </details> 
 </event>
</events> 

我像这样通过SimpleXmlElement运行它:

$xmlConvertedData = new \SimpleXMLElement($xml);

我转储了数据,看起来像这样:

object(SimpleXMLElement)#958 (2) {
    ["@attributes"]=>
    array(1) {
        ["Index"]=>
        string(1) "1"
    }
    ["Events"]=>
    object(SimpleXMLElement)#956 (1) {
        ["Event"]=>
        array(1) {
            [0]=>
            object(SimpleXMLElement)#959 (1) {
                ["Details"]=>
                object(SimpleXMLElement)#826 (13) {
                    ["Names"]=>
                    object(SimpleXMLElement)#834 (1) {
                        ["Translation"]=>
                        array(2) {
                            [0]=>
                            string(32) "English title"
                            [1]=>
                            string(33) "German title"
                        }
                    }
                }
            }
        }
    }
}

...注意,“翻译”不再具有“语言”属性,只是ID号为0和1。我需要知道属性值,因为XML并不总是总是首先显示相同的语言。

(我将缩短的示例代码编辑为一条记录,因此请忽略#958部分)

1 个答案:

答案 0 :(得分:0)

请勿在SimpleXML对象上使用任何xprint_r(),这将简化输出,因为其中可能有很多。如果要检查已加载的文档,请使用asXML() ...

var_dump()

或输出一种元素的语言...

echo $xmlConvertedData->asXML();

(您还需要更正样本的最后一个元素-echo $xmlConvertedData->event[0]->details->names->translation['language'];